
该函数采用几个数组(长度相同)作为输入,并返回另外三个数组.
但是,不可能事先预测返回数组的长度,并且这些数据是在函数中动态分配的.
是否可以用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更安全. 总结以上是内存溢出为你收集整理的python – 具有SWIG未知长度数组的NumPy C扩展全部内容,希望文章能够帮你解决python – 具有SWIG未知长度数组的NumPy C扩展所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)