在 Numpy C 扩展中返回可变长度数组?
我之前在这个 site 的帮助下制作了一些 Numpy C 扩展,但到目前为止正如我所看到的,返回的参数都是固定长度的。
有没有办法让 Numpy C 扩展返回可变长度的 numpy 数组?
I have made some Numpy C-extensions before with great help from this site, but as far as I can see the returned parameters are all fixed length.
Is there any way to have a Numpy C-extension return a variable length numpy array instead?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能会发现使用 Numpy C-API 在 Cython 中进行 numpy 扩展更容易,这简化了过程,因为它允许您混合 python 和 c 对象。在这种情况下,制作可变长度数组没有什么困难,您可以简单地指定具有任意形状的数组。
Cython numpy 教程 可能是有关此主题的最佳来源。
例如,这是我最近编写的一个函数:
如果这不适合您,有一个函数可以创建任意形状的新空数组(链接)。
You may find it easier to make numpy extensions in Cython using the Numpy C-API which simplifies the process as it allows you to mix python and c objects. In that case there is little difficult about making a variable length array, you can simply specify an array with an arbitrary shape.
The Cython numpy tutorial is probably the best source on this topic.
For example, here is a function I recently wrote:
If this doesn't suit you, there is a function for making a new empty array with arbitrary shape (link).
我将你的问题解释为“我有一个函数,它接受长度为 n 的 NumPy 数组,但它将返回与 n 不同的另一个长度为 m 的数组”。如果是这种情况,您将需要在扩展中
malloc
一个新的 C 数组,例如,然后用它创建一个新的 NumPy 数组。此示例假设一个一维数组:
然后返回新数组。这里重要的部分是设置 NPY_ARRAY_OWNDATA 标志,以便在 Python 对象被垃圾收集时释放您分配的内存。
I am interpreting your question to mean "I have a function that takes a NumPy array of length n, but it will return another array of length m different from n." If that is the case, you will need to
malloc
a new C array in the extension, e.g.then create a new NumPy array with that. This example assumes a 1D array:
Then return the new array. The important part here is to set the
NPY_ARRAY_OWNDATA
flag so that the memory you allocated is freed when the Python object is garbage collected.