Python代码加速利器:Cython

论坛 期权论坛 期权     
专知   2019-7-14 05:26   3778   0
【导读】如果你用过Python,你可能会发现它比想象中运行的慢,尤其是与C语言相比。这主要是因为Python是一种动态编程语言,然而C语言很多操作是在编译时就完成了。但也不是没有办法,Cython可以很好解决你的痛点。

Cython是结合了Python和C的语法的一种语言,可以简单的认为就是给Python加上了静态类型后的语法,使用者可以维持大部分的Python语法,而不需要大幅度调整主要的程式逻辑与算法。但由于会直接编译为二进制程序,所以性能较Python会有很大提升。虽然Cython本身是一种单独的编程语言,但很容易将其整合到例如Jupyter笔记本工作流程。在执行时,Cython将您的Python代码转换为C,通常会大大加快它的速度。

安装Cython
首先你需要你要C编译器。对于Linux,通常使用GNU C编译器(gncc)。对于Mac OS,您可以下载Xcode以获取gncc。而Windows 桌面系统下安装C编译器会更复杂。

有了C编译器之后,你只需运行:
  1. pip install Cython
复制代码
如何使用Cython
我们将在IPython中演示Cython。
我们首先介绍IPython Magic命令。Magic命令以百分号开头,通常有2种类型:
  • 单行Magic由单个'%'表示,并且仅在一行输入上操作
  • 单元格Magic用两个'%'表示,并在多行输入上操作。

首先运行下列语句引入Cython:

  1. %load_ext Cython
复制代码
然后,当运行Cython代码时,我们需要加入以下Cython 代码:
  1. %%cython
复制代码
然后就可以愉快地使用Cython了。

Cython的速度有多快?
Cython 主要优化的是循环与递归。

让我们用斐波那契数列来证明这一点。数列中下一个数字是前两项之和,用如下代码在Python中实现斐波那契数列:


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


如上图所示,在序列中找到第39个数字需要13.3秒。此处的挂起时间是指从调用该函数开始到结束所用的总时间。
让我们在Cython中定义相同的函数。
其实只是在第一行加入了
  1. %%cython -a
复制代码
加入“-a”之后,我们可以看出是Python中哪些代码比较耗时了,加入“%%cython” 之后,这些代码都将在C语言下运行。你还可以单击每行旁边的“+”符号以查看Python代码的C转换。


这段代码有多快?我们来看看:


在这种情况下,Cython比Python快约6.75倍。这清楚地展示了利用Cython节省时间的能力,它提供了比常规Python代码最大的改进。

其他选项
如果你熟悉C的使用,Cython还允许访问C代码,Cython的编写者尚未添加即用型声明。例如,使用以下代码,您可以为C函数生成Python包装器并将其添加到模块dict中。

  1. %%cython
复制代码
  1. cdef extern from "math.h":
复制代码
  1. cpdef double sin(double x)
复制代码
Cython还有许多其他功能,例如并行。

结论
如果您有时遇到不得不等待太长时间才能执行Python代码的问题,Cython提供了一种非常整齐且高效的方法来加速您的代码。最重要的是,如果您对C语言稍微熟悉,它提供了许多进一步优化代码的功能。我绝对建议您仔细查看文档。

原文链接:
https://towardsdatascience.com/speed-up-your-python-code-with-cython-8879105f2b6f
-END-
专 · 知
专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎登录www.zhuanzhi.ai,注册登录专知,获取更多AI知识资料!


欢迎微信扫一扫加入专知人工智能知识星球群,获取最新AI专业干货知识教程视频资料和与专家交流咨询!



请加专知小助手微信(扫一扫如下二维码添加),加入专知人工智能主题群,咨询技术商务合作~

专知《深度学习:算法到实战》课程全部完成!550+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!

点击“阅读原文”,了解报名专知《深度学习:算法到实战》课程
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:15
帖子:3
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP