python - Numba 通过影响就地损坏数据

标签 python numpy numba

Numba 和 NumPy 不以相同的方式执行以下 foo 函数:

from numba import jit
import numpy as np

@jit
def foo(a):
    a[:] = a[::-1] # reverse the array

a = np.array([0, 1, 2])
foo(a)
print(a)

使用 NumPy(不带 @jit)会打印 [2, 1, 0],而使用 Numba(带 @jit)则打印打印 [2, 1, 2]。看起来 Numba 就地修改了数组,这会导致数据损坏。通过制作数组的副本很容易解决:

a[:] = a[::-1].copy()

但这就是我们想要的行为吗? Numba 和 NumPy 不应该给出相同的结果吗?

我在 Python 3.5.2 中使用 Numba v0.26.0。

最佳答案

这是一个已知问题 ( https://github.com/numba/numba/issues/1960 ),已在 numba 0.27 中修复。根据 NumPy 行为,修复程序会检测重叠并制作临时副本以避免损坏数据。

关于python - Numba 通过影响就地损坏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516034/

相关文章:

python - Numpy 数组 View 语法

python - 如何从 numpy 数组继承多次

python - 是否可以在运行脚本之前使用 numba 编译代码?

python - 在 jitted 函数中两次反转 numpy 数组的 View 使函数运行得更快

python - 是否可以从模块中删除方法?

python - xlsxwriter 图表不显示?

python - 为什么基数排序的空间复杂度为 O(k + n)?

python - 通过检查多个条件更改 Pandas 列值

python - LoweringError 是什么意思?

python - 填充 pandas 数据框中的缺失值