提高6.75倍!利用Cython为Python代码加速

全文共2012字,预计学习时长4分钟html

图片来源:Unsplash算法

若是你曾经用Python编写过代码,可能会发现等待某些代码块执行的时间比预期要长。尽管能够经过一些方法提升其代码效率,但它的反应速度仍然比C语言慢。这主要归结于Pyhton是一种动态程序语言,在运行时执行不少任务,而C语言在编译期间便已经执行。编程

若是你很享受用Python编写代码,但又但愿能够提升效率,那么能够考虑一下使用Cython。Cython是一种独立编程语言,能够很容易地并入相似于Jupyter笔记本之类的工做流之中。在执行过程当中,Cython会将Python代码转换为C语言,从而大大提升其运行速度。bash

安装Cython微信

使用Cython须要安装C语言编译器,所以,安装过程会根据你当前的操做系统而有所不一样。对于Linux操做系统,一般须要安装GNU C语言编译器(gncc)。对于Mac操做系统,则须要经过下载Xcode来安装gncc。对于Windows操做系统,安装程序会稍微有点复杂。app

安装传送门:编程语言

Mac:https://developer.apple.com/函数

Windows:file://localhost/C/%5CUsers%5C93954%5CDocuments%5CWeChat%20Files%5CWXYHYSFY_1816%5CFileStorage%5CFile%5C2019-07%5CCython%20GitHub学习

安装C语言编译器以后,下面须要的就是在终端运行。优化

如何使用Cython

经过Jupyter笔记本演示Cython的功能是最简单的方法。要在笔记本中使用Python,须要运用IPython的魔术命令。该命令以百分号开始,提供附加功能用以加强工做流。一般,魔术命令分为两种类型:

1. Line Magic以一个%开头,且仅能做用于一行代码。

2. Cell Magic以两个%开头,能够做用于多行代码。

具体流程以下:

首先,为了启用Cython,须要执行命令

%load_extCython

每当想要在单元格中运行Cython时,须要先在单元格中输入下面的魔术命令

%%cython

完成上述操做以后,即可以开始编写Cython代码了。

图片来源:pixabay

Cython能有多快?

Cython能比常规Python代码快多少实际上取决于代码自己。例如,若是运行成本较高的多变量循环,Cython明显优于常规的Python代码。递归函数一样使得Cython快于Python。

用斐波那契数列来演示一下。简单来讲,这一算法经过将前两个数相加从而找到下一个数。下面是在Python中示范:

def fibonacci(n):    
if n < 0:        
print("1st fibonacci number = 0")    
elif n == 1:        
return 0    
elif n == 2:        
return 1    
else:        
return fibonacci(n-1) + fibonacci(n-2)复制代码

让咱们来启动Python:

能够看到,找到序列中第39个数用了13.3秒。挂钟时间在这里指的是从函数调用开始到结束所需的总时间。

在Cython中定义相同的函数:

那么发生了什么呢?能够看到,在顶端执行cell magic命令,从而使得Cython能够应用于这个单元格。我将简要介绍“-a”的做用,接着,使用与以前基本同样的代码。惟一的不一样之处在于此处可使用静态类型声明,并将n定义为整数。

能够看到,经过在魔术命令后添加“-a”,可以接收到一些标注,这些标注反映了代码中有多少Python交互。这一代码的目的在于去掉全部黄线并加上白色背景,于是此处不存在Python交互,全部代码都在C语言中执行。你还能够单击每行旁边的“+”查看Python代码的C语言翻译。

这一代码能有多快呢?咱们一块儿看看:

在本例中,Cython的速度大约是Python的6.75倍,这清楚地展现了Cython可以大大节约时间。这一点也是Cython相比于Python最大的改进之处。

附加选项

若是你对C语言已经有所了解,Cython还容许访问C代码,而Cython的建立者尚未为这些代码添加现成的声明。那么,使用如下代码能够为C函数生成Python包装器并将其添加到模块dict中。

%%cython
cdef extern from "math.h":    
cpdef double sin(double x)复制代码

Cython证实了并行性等许多额外的功能。

传送门:http://docs.cython.org/en/latest/index.html

总之,若是你遇到在执行Python代码时等待时间过长的问题,Cython能够提供一种集成而高效的方法来加速代码执行速度。更重要的是,若是你熟悉C语言,就可使用Cython许多进一步优化代码的功能。

留言 点赞 关注

咱们一块儿分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

(添加小编微信:dxsxbb,加入读者圈,一块儿讨论最新鲜的人工智能科技哦~)

相关文章
相关标签/搜索