使用C(和GSL)扩展和嵌入Python(和NumPy):将gsl_matrix传递给pyt
发布时间:2020-12-16 07:05:48 所属栏目:百科 来源:网络整理
导读:我的问题“应该”很简单,但我仍然无法解决它. 我目前正在开发一个项目,需要一些繁重的计算(在C中完成)和一些模拟后的数据分析(在Python中完成). 但是,现在我正在改变主算法,我需要从C和Python中“循环”一些计算来回. 也就是说,我需要在C和Python中来回移动
我的问题“应该”很简单,但我仍然无法解决它.
我目前正在开发一个项目,需要一些繁重的计算(在C中完成)和一些模拟后的数据分析(在Python中完成). 但是,现在我正在改变主算法,我需要从C和Python中“循环”一些计算来回. 在C中,数据矩阵是“gsl_matrix”对象,而在python中,相同的矩阵被实现为“numpy数组”. 目前,我正在运行我的C代码,将矩阵保存到文件,从python中读取它,将其写回文件,然后在C中再次打开它以进行进一步的计算. 由于这是非常低效的,我想问一下是否有人可以给我一个如何以“干净”的方式做到这一点的例子. 我一直在阅读(并尝试了10天)SWIG,Cython,Boost.Python和Boost.Numpy但我仍然无法破解它. 有没有人有一个有效的例子来分享? 谢谢! 刘若英 解决方法
我认为你不需要自己实现包装器,因为你可以使用
pygsl.如果你真的想要实现你自己的版本,这里是pygsl的例程,可能值得你
%{ #include <gsl/gsl_matrix_double.h> #include <gsl/gsl_matrix_complex_double.h> %} %include typemaps.i // gsl_matrix typemaps %typemap(in) gsl_matrix* %{ PyArrayObject *_PyMatrix$argnum; gsl_matrix_view matrix$argnum; { _PyMatrix$argnum = (PyArrayObject*) PyArray_ContiguousFromObject($input,PyArray_DOUBLE,2,2); if (_PyMatrix$argnum == NULL) return NULL; matrix$argnum = gsl_matrix_view_array((double*)_PyMatrix$argnum->data,_PyMatrix$argnum->dimensions[0],_PyMatrix$argnum->dimensions[1]); $1 = &matrix$argnum.matrix; } %} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |