Python 和 Numba : incorrect checksum for freed object

标签 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():
    ####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?

关于Python 和 Numba : incorrect checksum for freed object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49865334/

相关文章:

python - cpython:何时调用 PyDict_GetItem 以及何时调用 dict_subscript?

Python 解释器阻止多线程 DNS 请求?

python - 保存捕获的异常并将其在函数外部用于系统退出处理目的的正确方法是什么?

python - Numpy 求复共轭

带指针的 c strcat

iPhone SDK : I have memory issues, 任何人都可以帮助新手修复它们吗?

python - django 一对一关系如何将名称映射到子对象?

python - TensorFlow,什么时候可以使用类似 Python 的负索引?

python - 如何使用 ctypes 将 NumPy 复杂数组与 C 函数连接起来?

android - 从内核模块中查找异常向量表的物理地址