C++返回 Numpy 数组的 Python 扩展模块

C++ extension module for Python returning a Numpy array

本文关键字:Python 扩展 模块 数组 返回 Numpy C++      更新时间:2023-10-16

我正在尝试使用SWIG为C++Python创建一个扩展模块,它可以将Numpy数组返回给Python。这个 numpy 数组是多维的,每个单元格都可以有一个值或一个值列表(int 64, [int32, int32] 等]。我能够从C++将一个普通数组返回到 Python。谁能指导我如何进行这项工作?我遇到了numpy.i,arrayinterface,typemap,我不太确定如何开始。有人可以在这方面指导我吗?谢谢。

我认为Numpy C API是一个很好的方法。您仍然可以使用 SWIG。但我强烈建议不要使用 SWIG 类型图,它们非常复杂。相反,您可以在SWIG签名中接受并返回Numpy数组作为PyObject*指针,并使用C API构建/提取它们。SWIG将正确包装它。

如果这是你的第一个 Python 扩展,请务必阅读 Python C API 介绍。至少,您需要了解引用计数的 API 协定。

另一种选择是实现 numpy 理解的缓冲区协议 API。

另一种选择是Boost.Python,如果你不喜欢C代码进入C++世界。我没有这方面的经验。就我个人而言,我喜欢Python C API,因为它的复杂性很低。