2013-08-03 94 views
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個參數,這些論據是什麼?謝謝!

+0

只是猜測以下。 'nw'使用'%apply'指令需要10個參數和4個參數。所以你需要提供6個參數。 – zsong

+0

我不知道如果我遵循...你暗示%apply指令不會將我的原始參數減少到4個參數嗎? – mortonjt

回答

3

好吧,我想我已經找到了問題。

事實證明,SWIG 真的不喜歡我爲cstrings所做的應用指令。

我應該是應該以下指令來代替。

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

本來應該菜譜更仔細哈哈