【问题标题】:numpy external interfacing: when to require OWNDATAnumpy 外部接口:何时需要 OWNDATA
【发布时间】:2016-04-08 02:49:32
【问题描述】:

如果我想从 cython 代码接口到 numpy ndarray,显然我会想要一个 C_CONTIGUOUS 数组来让生活更轻松。

但是,在什么情况下我需要确保设置了 OWNDATA?

【问题讨论】:

    标签: numpy cython ctypes


    【解决方案1】:

    当内存块在 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

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      相关资源
      最近更新 更多