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/