swig numpy 多个矩阵和数组输入

Posted

技术标签:

【中文标题】swig numpy 多个矩阵和数组输入【英文标题】:swig numpy multiple matrix and array inputs 【发布时间】:2013-08-03 00:15:45 【问题描述】:

我正在尝试使用 SWIG 和 Numpy 类型映射将一个小的 C 函数接口到 python 中

这个函数定义如下

void nw(int* D, int Dx, int Dy, int* mat, int mx, int my, char *xstr, int xL,char *ystr, int yL);

而我的接口文件如下

%module nw

%
    #define SWIG_FILE_WITH_INIT
    #include "nw.h"
%

%include "numpy.i"

%init %
  import_array();
%
/*type maps for input arrays and strings*/
%apply (int* INPLACE_ARRAY2, int DIM1, int DIM2) (int* D, int Dx, int Dy)
%apply (int* IN_ARRAY2, int DIM1, int DIM2) (int* mat, int mx, int my)
%apply (char* IN_ARRAY, int DIM1)(char *xstr, int xL),(char *ystr, int yL)

%include "nw.h"

为了测试它,我使用了以下输入

D = numpy.zeros((5,5),numpy.int)
mat = numpy.array([[1, 0, 0, 0, 0, 0],
                   [0, 1, 0, 0, 0, 0],
                   [0, 0, 1, 0, 0, 0],
                   [0, 0, 0, 1, 0, 0],
                   [0, 0, 0, 0, 1, 0],
                   [0, 0, 0, 0, 0, 1]],numpy.int)
x = numpy.array(list("ABCD"))
y = numpy.array(list("ABCD"))
import nw
nw.nw(D,mat,x,y)

但是当我运行它时,我得到以下信息

TypeError: nw() takes exactly 6 arguments (4 given)

我真的很困惑这些参数是如何定义的。这里有没有人知道为什么有 6 个论点以及这些论点是什么?谢谢!

【问题讨论】:

只是猜测。 nw 接受 10 个参数,而你使用 %apply 指令接受 4 个参数。所以需要提供6个参数。 我不确定我是否遵循...您是在暗示 %apply 指令不会将我的原始参数减少到 4 个参数? 【参考方案1】:

好吧,我想我已经找到问题所在了。

事实证明,SWIG 真的不喜欢我为 cstrings 制作的应用指令。

我应该改为以下指令。

%apply (char *STRING, int LENGTH) (char *xstr, int xL),(char *ystr, int yL)

应该更仔细地遵循食谱哈哈

【讨论】:

以上是关于swig numpy 多个矩阵和数组输入的主要内容,如果未能解决你的问题,请参考以下文章

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

通过 SWIG 将简单的 numpy 数组传递给 C

使用 SWIG 的几个 numpy 数组

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

Python Numpy矩阵乘法使用循环将多个矩阵相乘

使用 SWIG 将 numpy 数组元素(int)传递给 c++ int