我正在尝试使用循环来更新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():
####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_error_break中设置断点以进行调试
此错误并不总是发生在同一个地方。有时错误发生在第一个outerFunc
完成后,但它可能会在第一个outerFunc
完成之前显示。
是否与我正在进行内部更新,两次调用outerFunc
或两者都有关?我在做内存管理吗?
答案 0 :(得分:1)
您的代码适用于Numba 0.37(以及之前的许多版本):
import numba as nb
import numpy as np
@nb.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():
arr1 = np.random.normal(size=(10000,))
arr2 = np.random.normal(size=(10000,))
outerFunc(arr1)
outerFunc(arr2)
return arr1, arr2
但你也可以这样做:
@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?