python - 通过引用传递的 SWIG Python 固定大小数组

标签 python c++ numpy swig

我一直在尝试弄清楚如何使用 SWIG 将固定大小的数组通过引用传递给 python。大多数情况下,我一直在为此考虑 numpy.i 接口(interface)。但是,我似乎无法在网上找到对此的任何引用。

对于传递给 numpy 的常规数组,您所做的是首先是 foo.h 中的 C++ 函数:

void foo(double* array, int length);

SWIG 文件的相关部分是:

%include "numpy.i"

%init %{
import_array();
%}

%apply (unsigned char* IN_ARRAY1, int DIM1) {(unsigned char* frame, int len)};

%include "foo.h"

问题是当 C++ 函数是:

void bar(double (&array)[3]);

最佳答案

这是对 3 个 double 组的引用,对吗?根据34.3.9 Pointers, references, values, and arrays ,您应该可以按原样使用。

否则,您可以尝试 34.9.4 Mapping Python tuples into small arrays ,或之后的部分。或者在您的问题中提供更多详细信息,了解您希望能够编写哪些 Python 代码与如果您让 SWIG 按原样导出 bar() 函数而不使用类型映射则必须编写的代码。

更新:您还应该能够 %extend 或 %inline 转发到数组版本的适配器函数,例如:

%inline %{
    void bar(double* array, int length) {
         typedef double triplet[3]; // array of 3 doubles
         bar((triplet&)array); // shouldselect your bar since only one arg
    }
%}

警告:未经测试;)

关于python - 通过引用传递的 SWIG Python 固定大小数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498128/

相关文章:

python - Pandas 无法使用聚合函数列表进行聚合

Python 构建失败

C++虚函数

python - matplotlib 轮廓可以匹配像素边缘吗?

python - 在 Qt 中仅从 Outlook 拖放一个附件?

查找在 2 个字符串中不匹配的第一个索引的 pythonic 方法

c++ - 我的算法只将第一个字写入文件?

c++ - 如何编译一个简单的Arduino程序?

python - OpenCV 4 TypeError:参数 'labels' 的预期 cv::UMat

Python、Numpy : Cannot assign the values of a numpy array to a column of a matrix