用于Python的C ++扩展模块返回一个Numpy数组

时间:2018-10-26 11:53:29

标签: python c++ arrays numpy swig

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

1 个答案:

答案 0 :(得分:0)

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

如果这是您的第一个Python扩展,请确保您阅读了Python C API intro。至少,您需要了解API合同才能进行引用计数。

另一种选择是实现numpy可以理解的buffer protocol API。

如果您不喜欢C代码进入C ++世界,那么另一个选择是Boost.Python。我没有经验。我个人喜欢Python C API的低复杂性。