【发布时间】:2016-04-08 02:49:32
【问题描述】:
如果我想从 cython 代码接口到 numpy ndarray,显然我会想要一个 C_CONTIGUOUS 数组来让生活更轻松。
但是,在什么情况下我需要确保设置了 OWNDATA?
【问题讨论】:
如果我想从 cython 代码接口到 numpy ndarray,显然我会想要一个 C_CONTIGUOUS 数组来让生活更轻松。
但是,在什么情况下我需要确保设置了 OWNDATA?
【问题讨论】:
当内存块在 C 代码中分配并传递给 Cython 代码(可能通过回调)时,最好使用 NPY_OWNDATA。在这种情况下,如果您希望 Numpy 开始引用计数并在引用计数变为零时自动释放内存块,那么您添加 NPY_OWNDATA 标志。
如果您在 C 代码中使用环形缓冲区或其他结构,其中 Python 代码只会在执行计算时临时使用内存,然后会通知 C 代码它可以重用内存块那么你肯定不想要 NPY_OWNDATA 因为 Numpy 会释放 C 代码期望仍然拥有的内存。
这里有一个很好的讨论:
http://blog.enthought.com/python/numpy-arrays-with-pre-allocated-memory/#.VxpQTjArKUk
【讨论】: