Python代码加速利器:Cython

2019 年 7 月 13 日 专知

【导读】如果你用过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编译器之后,你只需运行:

pip install Cython


如何使用Cython

我们将在IPython中演示Cython。

我们首先介绍IPython Magic命令。Magic命令以百分号开头,通常有2种类型:

  • 单行Magic由单个'%'表示,并且仅在一行输入上操作

  • 单元格Magic用两个'%'表示,并在多行输入上操作。


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

%load_ext Cython

然后,当运行Cython代码时,我们需要加入以下Cython 代码:

%%cython

然后就可以愉快地使用Cython了。


Cython的速度有多快?

Cython 主要优化的是循环与递归。


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


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


使用Python:

如上图所示,在序列中找到第39个数字需要13.3秒。此处的挂起时间是指从调用该函数开始到结束所用的总时间。

让我们在Cython中定义相同的函数。

其实只是在第一行加入了

%%cython -a

加入“-a”之后,我们可以看出是Python中哪些代码比较耗时了,加入“%%cython” 之后,这些代码都将在C语言下运行。你还可以单击每行旁边的“+”符号以查看Python代码的C转换。

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

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


其他选项

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

%%cythoncdef extern from "math.h":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+位同学在学习,现在报名,限时优惠!网易云课堂人工智能畅销榜首位!

点击“阅读原文”,了解报名专知《深度学习:算法到实战》课程

登录查看更多
3

相关内容

Python是一种面向对象的解释型计算机程序设计语言,在设计中注重代码的可读性,同时也是一种功能强大的通用型语言。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Github项目推荐 | Pytorch TVM 扩展
AI研习社
11+阅读 · 2019年5月5日
一个牛逼的 Python 调试工具
机器学习算法与Python学习
15+阅读 · 2019年4月30日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP 入门教程
大数据技术
19+阅读 · 2017年10月24日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
3D Face Modeling from Diverse Raw Scan Data
Arxiv
5+阅读 · 2019年2月13日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
3+阅读 · 2018年4月9日
Arxiv
10+阅读 · 2018年2月17日
Arxiv
8+阅读 · 2018年1月25日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
22+阅读 · 2019年11月7日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
Github项目推荐 | Pytorch TVM 扩展
AI研习社
11+阅读 · 2019年5月5日
一个牛逼的 Python 调试工具
机器学习算法与Python学习
15+阅读 · 2019年4月30日
34个最优秀好用的Python开源框架
专知
9+阅读 · 2019年3月1日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Python3.7中一种懒加载的方式
Python程序员
3+阅读 · 2018年4月27日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
Python NLP 入门教程
大数据技术
19+阅读 · 2017年10月24日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
相关论文
3D Face Modeling from Diverse Raw Scan Data
Arxiv
5+阅读 · 2019年2月13日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
3+阅读 · 2018年4月9日
Arxiv
10+阅读 · 2018年2月17日
Arxiv
8+阅读 · 2018年1月25日
Top
微信扫码咨询专知VIP会员