7

SWIG と Numpy タイプマップを使用して、Python に作成した小さな C 関数をインターフェイスしようとしています

この関数は次のように定義されます

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つの引数があり、これらの引数が何であるかを知っている人はいますか? ありがとう!

4

1 に答える 1

4

わかりました、私は問題を理解したと思います。

結局のところ、SWIGは私が cstring に対して作成した適用ディレクティブを気に入らなかったのです。

代わりに、次のディレクティブを使用する必要があります。

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

料理本をもっと注意深く見るべきだった(笑)

于 2013-08-03T03:05:09.857 に答える