[英]NumPy C extension with SWIG unknown length array
我想用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
在函数中被分配(使用malloc
)。
似乎SWIG(或任何其他Python包装器生成器)不能这样做。 我最终手工编写了Python包装器,这实际上非常简单,使用PyArray_SimpleNew
或PyArray_SimpleNewFromData
来创建输出数组。 对于后者,必须格外小心,以免产生内存泄漏。 在玩了一下之后,我发现前者加上一个简单的memcpy
更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.