用Cython加速Python代码,速度溜到飞起

开发 后端
如果你曾用Python编写代码,那么你可能花了更多的时间等待某些代码块的执行,而不是你想要的。虽然有一些方法可以使您的代码更有效,但它很可能仍然比C代码慢。这主要归结为Python是一种动态编程语言,并将许多东西移动到C语言编译期间处理的运行时。

介绍

如果你曾用Python编写代码,那么你可能花了更多的时间等待某些代码块的执行,而不是你想要的。虽然有一些方法可以使您的代码更有效,但它很可能仍然比C代码慢。这主要归结为Python是一种动态编程语言,并将许多东西移动到C语言编译期间处理的运行时。

[[275456]]

不过,如果你像我一样喜欢用Python编写代码并且仍想加速你代码,你可以考虑使用Cython。虽然Cython本身是一种独立的编程语言,但很容易将其整合到例如Jupyter笔记本工作流程。在执行时,Cython将您的Python代码转换为C,通常会显著加快它的速度。

安装Cython

为了能够使用Cython,您将需要一个C编译器。因此,安装过程会因您当前的操作系统而异。对于Linux,通常存在GNU C编译器(gncc)。对于Mac OS,您可以下载Xcode以获取gncc。如果您应该使用Windows,则安装过程会稍微复杂一些。

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

  1. pip install Cython 

如何使用Cython

演示Cython功能的最简单方法是通过Jupyter笔记本。要在我们的笔记本中使用Cython,我们将使用IPython魔术命令。 Magic命令以百分号开头,并提供一些可以增强工作流程的附加功能。通常,有两种类型的魔术命令:

  1. 线条魔法由单个'%'表示,并且仅在一行输入上操作
  2. 单元格魔术用两个'%'表示,并在多行输入上操作。

让我们开始吧:

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

  1. %load_ext Cython 

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

  1. %%cython 

一旦你完成了,你就可以开始在Cython中开始编码了。

Cython的速度有多快?

与常规Python代码相比,Cython的速度有多快取决于代码本身。例如,如果您运行具有许多变量的计算量很大的循环,Cython将大大优于常规Python代码。递归函数也会使Cython比Python快得多。

让我们用Fibonacci序列来证明这一点。简单地说,这个算法通过将前两个数字相加来找到下一个数字。以下是Python中的内容:

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

让Python工作:

用Cython加速Python代码,速度溜到飞起

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

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

用Cython加速Python代码,速度溜到飞起

这里发生了什么?正如您所看到的,我们正在使用一些单元格魔术,允许我们在此单元格中使用Cython。我将很快解释'-a'选项的作用。然后,我们基本上采用与上面相同的代码,除了现在我们能够使用静态类型声明并将n定义为整数类型这一事实。

正如您所看到的,通过在magic命令之后添加'-a',我们收到了注释,向我们展示了代码中有多少Python交互。这里的目标是摆脱所有的黄线,让他们有一个白色的背景。在这种情况下,将不会有Python交互,所有代码都将在C中运行。您还可以单击每行旁边的“+”符号以查看Python代码的C转换。

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

用Cython加速Python代码,速度溜到飞起

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

其他选项

如果您已经知道C、Cython还允许访问C代码,Cython的制造商尚未添加即用型声明。例如,使用以下代码,您可以为C函数生成Python包装器,并将其添加到模块dict中。

  1. %%cython 
  2. cdef extern from "math.h"
  3.  cpdef double sin(double x) 

Cython证明了许多其他功能,例如并行性,这些功能在其文档中描述非常简洁。

结论

如果您有时遇到不得不等待太长时间才能执行Python代码的问题,Cython提供了一种非常整齐且高效的方法来加速您的代码。最重要的是,它提供了许多进一步优化您的合作的功能。

责任编辑:华轩 来源: 今日头条
相关推荐

2020-07-23 14:15:42

Cython的Python代码

2020-10-14 12:29:51

开源图表 开发

2022-02-22 08:29:59

Vue前端防抖

2018-02-25 09:12:15

PythonC语言代码

2017-06-13 10:15:16

iMac苹果iMac Pro

2017-06-05 14:35:45

2018-02-24 08:54:41

2023-03-31 15:10:32

PythonVSCode程序员

2020-07-21 15:00:49

Java 8并行流Java

2013-03-25 09:41:20

PythonCython

2020-11-18 13:54:27

IDEAJava开发

2020-09-02 14:00:05

Python代码脚本

2021-11-25 16:25:53

代码开发技术

2010-05-05 17:19:55

云计算

2013-07-03 09:52:13

热部署热替换

2013-07-04 13:19:24

Java开发速度

2018-03-05 10:27:47

电脑卡顿旧电脑

2014-03-17 10:28:52

PythonJulia

2019-10-17 10:30:34

Python脚本语言设计
点赞
收藏

51CTO技术栈公众号