具有SWIG未知长度数组的NumPy C扩展

时间:2011-10-28 12:21:12

标签: python c numpy swig

我想用SWIG包装一个C函数。 该函数采用几个数组(长度相同)作为输入,并返回另外三个数组。 但是,不可能事先预测返回数组的长度,并且这些数据是在函数中动态分配的。 是否可以用SWIG(使用numpy.i)包装这样的函数,如果是这样的话怎么样? 简化的函数声明如下所示:

int func(double **a, double **b, long int *N, double *x, double *y, long int *Nx, long int *Ny);

预先知道NxNy,但Nab的长度)不是a和{b {1}}已在函数中分配(malloc)。

1 个答案:

答案 0 :(得分:1)

似乎SWIG(或任何其他Python包装器生成器)无法做到这一点。 我最终手工编写了Python包装器,这实际上非常简单,使用PyArray_SimpleNewPyArray_SimpleNewFromData来创建输出数组。 对于后者,必须格外小心,以免产生内存泄漏。 在玩了一下后,我发现前者与简单的memcpy结合起来更安全。