使用Cython加速你的Python代码

开发 后端
虽然Cython本身是一种独立的编程语言,但它很容易合并到你的工作流程中。在执行时,Cython会将Python代码转换为C,通常会大大加快速度。

如果您曾经用Python编写过代码,那么您可能花费了比您希望的更多的时间等待某些代码块的执行。虽然有一些方法可以提高代码的效率,但是它很可能仍然比C代码慢。这主要归结为Python是一种动态编程语言,并将许多C在编译期间负责的事情转移到运行。

不过,如果喜欢用Python编码,并且仍然希望加快代码速度,那么可以考虑使用Cython。虽然Cython本身是一种独立的编程语言,但它很容易合并到你的工作流程中。在执行时,Cython会将Python代码转换为C,通常会大大加快速度。

使用Cython加速你的Python代码

安装Cython

为了能够使用Cython,你需要一个C编译器。因此,安装过程因您当前的操作系统而异。对于Linux,通常有GNU C编译器(gncc)。对于Mac OS,你可以下载Xcode来获取gncc。如果您应该使用Windows,那么安装过程会有点复杂。更多信息请访问Cython的GitHub:

https://github.com/cython/cython/wiki/InstallingOnWindows

一旦你有了你的C编译器,所有你需要运行在你的终端是:

  1. pip install Cython 

如何使用Cython

展示Cython功能的最简单方法是通过Jupyter notebook。要在我们的notebook中使用Cython,我们将使用IPython magic命令。Magic命令以百分号开始,并提供一些额外的特性,以增强您的工作流程。一般来说,有两种类型的magic命令:

  • 行magic由一个“%”表示,只对一行输入进行操作
  • 单元格magic由两个“%”表示,并对多行输入进行操作。

让我们开始:

首先,为了能够使用Cython,我们必须运行:

  1. %load_ext Cython 

现在,每当我们想在一个代码单元中运行Cython时,我们必须首先在单元格中放入以下magic命令:

  1. %%cython 

一旦您完成了这些,您就可以开始使用Cython进行编码了。

Cython快了多少

Cython比普通Python代码快多少实际上取决于代码本身。例如,如果您运行的是具有许多变量的计算开销较大的循环,那么Cython的性能将大大优于常规Python代码。递归函数也会使Cython比Python快得多。

让我们用斐波那契序列来演示这一点。简单地说,这个算法是通过将前两个数相加来找到下一个数。这是它在Python中的样子:

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

首先,为了能够使用Cython,我们必须运行:

使用Cython加速你的Python代码

如您所见,查找序列中的第39个数字花费了13.3秒。这里的Wall time指的是函数调用从开始到结束所花费的总时间。

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

使用Cython加速你的Python代码

这是怎么回事?如你所见,我们在上面使用了一些细胞magic,允许我们在这个细胞中使用Cython。我稍后将解释“-a”选项的作用。然后,我们基本上采用与上面相同的代码,除了现在我们能够使用静态类型声明并将n定义为integer类型。

如您所见,通过在这个神奇的命令之后添加“-a”,我们收到了注释,这些注释显示了代码中有多少Python交互。这里的目标是去掉所有的黄线,用白色的背景代替。在这种情况下,没有Python交互,所有代码都将在C中运行。您还可以单击每一行旁边的“+”符号,查看Python代码的C语言翻译。

代码快了多少?让我们来看看:

使用Cython加速你的Python代码

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

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-09-02 08:58:27

Python编译器编程语言

2013-03-25 09:41:20

PythonCython

2019-05-16 14:50:32

CythonPython编程语言

2021-01-01 14:36:03

Python开发语言

2021-04-27 06:44:03

PythonCython编程语言

2019-10-17 09:57:08

Python设计电脑

2020-05-21 08:53:12

Python技术代码

2020-05-21 15:14:15

Python列表字典

2017-02-14 08:33:48

CPULinux内核

2020-09-02 14:00:05

Python代码脚本

2021-07-16 10:32:33

前端元编程代码

2014-08-08 13:40:53

AngularJS模块

2021-11-17 21:58:02

Python编程语言

2020-07-01 07:41:22

Python加速代码

2022-11-08 08:45:30

Prettier代码格式化工具

2023-06-15 08:00:23

2020-11-15 18:00:49

开源可视化工具Python

2019-10-17 10:30:34

Python脚本语言设计

2018-02-25 09:12:15

PythonC语言代码

2016-10-12 13:37:09

LombokIDEidea
点赞
收藏

51CTO技术栈公众号