使用 SWIG 的几个 numpy 数组

Posted

技术标签:

【中文标题】使用 SWIG 的几个 numpy 数组【英文标题】:Several numpy arrays with SWIG 【发布时间】:2010-04-20 09:48:46 【问题描述】:

我正在使用 SWIG 将 numpy 数组从 Python 传递到 C++ 代码:

%include "numpy.i"
%init %
import_array();
%

%apply (float* INPLACE_ARRAY1, int DIM1) (float* data, int n);

class Class 

  public: 
  void test(float* data, int n)
  
    //...
  
;

在 Python 中:

c = Class()
a = zeros(5)
c.test(a)

这可行,但如何将多个 numpy 数组传递给同一个函数?

【问题讨论】:

【参考方案1】:

我从我的一位同事那里找到了答案:

%apply (float* INPLACE_ARRAY1, int DIM1) (float* data1, int n1), (float* data2, int n2);

class Class 

  public: 
  void test(float* data1, int n1, float* data2, int n2)
  
    //...
  
;

现在两个 numpy 数组被传递给 Class::test。

【讨论】:

您可以通过将类型映射同时应用于两个输入对来稍微缩短应用指令:%apply (float* INPLACE_ARRAY1, int DIM1) (float* data1, int n1), (float* data2, int n2);

以上是关于使用 SWIG 的几个 numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 swig 使 C++ 类看起来像一个 numpy 数组

如何使用 SWIG 将 numpy 数组转换为 vector<int>&(参考)

带有 SWIG 未知长度数组的 NumPy C 扩展

带有 SWIG 的 C++ 数组到 Numpy 的 TypeError 问题

swig numpy 多个矩阵和数组输入

使用 SWIG 将 C++ <vector> 包装为 python NumPy 数组