Python & Numba:释放对象的校验和不正确
Python & Numba: incorrect checksum for freed object
我正在尝试使用循环更新 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
时,我一直看到这样的错误:
incorrect checksum for freed object - object was probably modified
after being freed.
*** set a breakpoint in malloc_error_break to debug
而且这个错误并不总是发生在同一个地方。有时错误发生在第一个 outerFunc
完成后,但它甚至可能在第一个 outerFunc
完成之前出现。
这是否与我正在进行就地更新、调用 outerFunc
两次或两者都有关系?我在做内存管理方面的事情吗?
您的代码适用于 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?
我正在尝试使用循环更新 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
时,我一直看到这样的错误:
incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug
而且这个错误并不总是发生在同一个地方。有时错误发生在第一个 outerFunc
完成后,但它甚至可能在第一个 outerFunc
完成之前出现。
这是否与我正在进行就地更新、调用 outerFunc
两次或两者都有关系?我在做内存管理方面的事情吗?
您的代码适用于 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?