python – 具有SWIG未知长度数组的NumPy C扩展
发布时间:2020-12-20 13:25:00 所属栏目:Python 来源:网络整理
导读:我想用SWIG包装一个C函数. 该函数采用几个数组(长度相同)作为输入,并返回另外三个数组. 但是,不可能事先预测返回数组的长度,并且这些数据是在函数中动态分配的. 是否可以用SWIG(使用numpy.i)包装这样的函数,如果是这样的话怎么样? 简化的函数声明如下所示:
我想用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更安全.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |