繁体   English   中英

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

[英]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);

其中NxNy事先已知但Nab的长度)不是,并且ab在函数中被分配(使用malloc )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM