Python&;Numba:已释放对象的校验和不正确
我正在尝试使用一个循环来更新Numba中的数组,因为我知道Numba不支持创建数组。简而言之,我的函数如下所示:Python&;Numba:已释放对象的校验和不正确,python,numpy,memory-management,numba,Python,Numpy,Memory Management,Numba,我正在尝试使用一个循环来更新Numba中的数组,因为我知道Numba不支持创建数组。简而言之,我的函数如下所示: @jit(nopython=True) def innerFunc(arr): for i in range(10000): arr[i] = arr[i] * 100 return arr def outerFunc(arr): arr = innerFunc(arr) return arr def main(): ###
@jit(nopython=True)
def innerFunc(arr):
for i in range(10000):
arr[i] = arr[i] * 100
return arr
def outerFunc(arr):
arr = innerFunc(arr)
return arr
def main():
####Create two numpy arrays with 10,000 random numbers each####
####and call them arr1 and arr2####
outerFunc(arr1)
outerFunc(arr2)
return arr1, arr2
但是,当我运行main
时,我一直看到如下错误:
已释放对象的校验和不正确-对象可能已修改
被释放后。
***在malloc\u error\u break中设置断点以进行调试
这个错误并不总是发生在同一个地方。有时错误发生在第一个outerFunc
完成之后,但它甚至可能在第一个outerFunc
完成之前出现
这与我正在进行一次就地更新,调用
outerFunc
两次,或者两者都调用有关吗?我在内存管理方面做了些什么吗?您的代码可以使用Numba 0.37(可能适用于许多早期版本):
但你也可以这样做:
@nb.jit(nopython=True)
def func2(x):
for i in range(x.shape[0]):
x[i] = x[i] * 100
return x
@nb.jit(nopython=True)
def func(N):
arr1 = np.random.randn(N)
arr2 = np.random.randn(N)
arr1 = func2(arr1)
arr2 = func2(arr2)
return arr1, arr2
然后运行func(10000)
,这样也可以工作
您使用的是哪个版本的Numba?Numba支持数组创建:@JoshAdel它是否支持在
nopython
模式下创建数组?我想这就是为什么我们需要循环jitting。我使用的是0.37.0。我的代码怎么了?我没有使用@nb
?我不确定,因为您没有提供可运行代码的完整示例。nb
只是一个别名,取决于我选择如何导入numba。取决于你是如何做到的,它不一定是相同的。
@nb.jit(nopython=True)
def func2(x):
for i in range(x.shape[0]):
x[i] = x[i] * 100
return x
@nb.jit(nopython=True)
def func(N):
arr1 = np.random.randn(N)
arr2 = np.random.randn(N)
arr1 = func2(arr1)
arr2 = func2(arr2)
return arr1, arr2