我想用SWIG包装一个C函数。 该函数采用几个数组(长度相同)作为输入,并返回另外三个数组。 但是,不可能事先预测返回数组的长度,并且这些数据是在函数中动态分配的。 是否可以用SWIG(使用numpy.i)包装这样的函数,如果是这样的话怎么样? 简化的函数声明如下所示:
int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);
预先知道Nx
和Ny
,但N
(a
和b
的长度)不是a
和{b
{1}}已在函数中分配(malloc
)。
答案 0 :(得分:1)
似乎SWIG(或任何其他Python包装器生成器)无法做到这一点。
我最终手工编写了Python包装器,这实际上非常简单,使用PyArray_SimpleNew
或PyArray_SimpleNewFromData
来创建输出数组。
对于后者,必须格外小心,以免产生内存泄漏。
在玩了一下后,我发现前者与简单的memcpy
结合起来更安全。