質問: SWIG未知の長さ配列を持つNumPy C拡張 私はSWIGとCの関数をラップしたいと思います。 この関数は、(同じ長さの)2つの配列を入力として取り、さらに3つの配列を返します。 しかし、リターン配列の長さを事前に予測することはできず、これらは関数内で動的に割り当てられます。 SWIG(numpy.iを使用)でそのような関数をラップすることは可能ですか? 単純化された関数宣言は次のようになります。 ``` int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny); ``` `a` と `b N` と `Ny` >)は関数内ではなく、( `malloc` で) `a` と `b` が割り当てられます。
回答: SWIG(または他のPythonラッパージェネレータ)はこれを行うことができないようです。 PyArray_SimpleNew または `PyArray_SimpleNewFromData` を使用して出力配列を作成することで、Pythonラッパーを手作業で書くことになりました。 後者の場合、メモリリークを発生させないように注意する必要があります。 それを少し試してみたところ、私は単純な<code> memcpy と組み合わされた方が安全であることがわかりました。