Python&;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(): ###

我正在尝试使用一个循环来更新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\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