4
我試圖接口小C函數使用SWIG我到蟒製成,並且numpy的typemaps痛飲numpy的多個矩陣和陣列輸入
此功能定義如下
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'使用'%apply'指令需要10個參數和4個參數。所以你需要提供6個參數。 – zsong
我不知道如果我遵循...你暗示%apply指令不會將我的原始參數減少到4個參數嗎? – mortonjt