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

python – 具有SWIG未知长度数组的NumPy C扩展,第1张

概述我想用SWIG包装一个C函数. 该函数采用几个数组(长度相同)作为输入,并返回另外三个数组. 但是,不可能事先预测返回数组的长度,并且这些数据是在函数中动态分配的. 是否可以用SWIG(使用numpy.i)包装这样的函数,如果是这样的话怎么样? 简化的函数声明如下所示: int func(double **a, double **b, long int *N, double *x, double 我想用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更安全. 总结

以上是内存溢出为你收集整理的python – 具有SWIG未知长度数组的NumPy C扩展全部内容,希望文章能够帮你解决python – 具有SWIG未知长度数组的NumPy C扩展所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1196535.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存