python调用c++静态库_如何在python中使用cython调用C++库gsl

本文介绍了如何通过Cython在Python中调用C++静态库,特别是数学运算库GSL。首先,阐述了Python中利用Cython调用C++的优势,接着展示了简单的Cython调用C++的示例。然后,详细说明了安装和验证GSL库的过程,并在Cython环境中调用GSL进行矩阵操作。最后,讨论了在处理复杂函数时涉及的Python对象与C++数据类型转换的问题,以及如何解决类型转换错误。
摘要由CSDN通过智能技术生成

python的一个最大的问题就是for循环太慢,有时候对于多维变量必须要用for循环尤其是多重for循环的时候,还得向C++寻求帮助。

这里主要介绍如何在python中调用C++

在python中调用C++最好的办法是cython,这个方法比较成熟。特点是最大程度保留了python的书写方式和C++的运算速度。

调用cython的方法很简单,一般装了jupyter的系统里就自带cython了。

调用方式一般是:

这里把关键代码展示一下:

就是这么简单,直接在jupyter里引用就行了。cython后面的关键词-a是用来显示Yellow lines的,也就是代码中可以优化的地方(python与c++交互频繁的地方)。

——————————————————————————————————————

接下来谈谈如何调用其他c++库,这里以gsl库为例。

gsl库是C++里做数学运算的重要库。C++里专门做科学运算的库比较少,gsl是比较好的一个。

安装方法:

Ubuntu:

sudo apt-get install libgsl-dev

安装完成之后,写一个代码验证:

example.c

#include #include

int main (void)

{

gsl_matrix* myMatr = gsl_matrix_alloc(10,20);

// matrix of 8sfor (int i=0; i < 10; i++)

for (int j=0; j < 20; j++)

gsl_matrix_set(myMatr, i, j, 8);

gsl_matrix_free(myMatr);

printf("Hello\n");

return 0;

}

然后编译、链接测试程序:

gcc example.c -lgsl -lgslcblas -lm

上面的-lgsl -lgslcblas -lm是gsl需要的库,来源在这里:Using the Library

运行结果如下图所示:

这就说明gsl在本地装好了。

——————————————————————————————————————

接下来在cython里调用gsl:

就这样extern一下就行了。当然,记得cython后面要接上-lgsl -lgslcblas -lm,那是gsl必须的库。

——————————————————————————————————————

进阶:如果要调用的gsl里复杂一些的函数,就要注意python object和C++数据类型的转换:

这里如果直接将proll[i,j,:]带入gsl_stats_correlation函数计算,会报错,显示不能把python object转换成const double。我的解决方法是用上图中两个框来自定义gsl_stats_correlation函数所需的input结构,然后给这个input结构赋值。对于单个数对数的赋值cython是已经很好的解决了的。

另外,第一个框中用malloc是为了定义动态数组。这也是c++中比较不同于python的麻烦之处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值