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

玛雅吧官网 ?
n

全文共2012字,预计学4个小时

n n

n

Unsplash

n n

如果你曾经用Python编写代码,你可能会发现等待执行某些代码块的时间比预期的要长。尽管有提高代码效率的方法,但其响应速度仍然比C语言慢。这主要是因为Pyhton是一种动态编程语言,它在运行时执行许多任务,而C语言在编译期间执行。

n n

如果您喜欢用Python编写代码,但想提高效率,请考虑使用Cython。 Cython是一种独立的编程语言,可以轻松地集成到Jupyter笔记本等工作流程中。在执行期间,Cython会将Python代码转换为C语言,这将大大提高其速度。

n n

安装Cython

n n

使用Cython需要安装C编译器,所以。安装过程将根据您当前的操作系统而有所不同。对于Linux操作系统,通常需要安装GNUC语言编译器(gncc)。对于Mac OS,您需要通过下载Xcode来安装gncc。对于Windows操作系统,安装程序稍微复杂一些。

n n

安装C编译器后,需要在终端中运行以下命令。

n n

如何使用Cython

n n

通过Jupyter笔记本演示Cython的功能是最简单的方法。要在笔记本中使用Python,您需要使用IPython的魔术命令。该命令以百分号开头,并提供其他功能以增强工作流程。通常,魔术命令分为两种类型:

n n

1.LineMagic以%开头,只能在一行代码上运行。

n n

2.CellMagic以2%开头,可以处理多行代码。

n n

具体过程如下:

n n

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

n n

%load_extCython

n n

每当您想在单元格中运行Cython时,您需要在单元格中输入以下魔术命令

n n

%%用Cython

n n

完成此操作后,您就可以开始编写Cython代码了。

n n

n

pixabay

n n

Cython有多快?

n n

Cython比普通Python代码快多少实际上取决于代码本身。例如,如果运行高成本的多变量循环,Cython明显优于常规Python代码。递归函数也使Cython比Python更快。

n n

展示Fibonacci序列。简单来说,该算法通过添加前两个数字来查找下一个数字。这是Python的演示:

n n

Deffibonacci(n):

n

    ifn< 0:        print(" 1stfibonaccinumber=0")

n

    elifn==1:        return0

n

    elifn==2:        return1

n

   否则:        returnfibonacci(n-1)+ fibonacci(n-2)

n n

让我们开始Python:

n n

n n

如您所见,在序列中找到第39个数字需要13.3秒。这里的挂钟时间是指从函数调用开始到结束所需的总时间。

n n

在Cython中定义相同的函数:

n n

n n

所以发生了什么事?如您所见,在顶部执行cellmagic命令,以便可以将Cython应用于此单元格。我将简要介绍“-a”的作用,然后使用与以前相同的基本代码。唯一的区别是这里可以使用静态类型声明。并将n定义为整数。

n

 

n

并添加白色背景,因此此处没有Python交互,所有代码都在C中执行。您还可以单击每行旁边的“+”以查看C Python代码的语言翻译。

n n

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

n n

n n

在这种情况下,Cython比Python快约6.75倍,这清楚地表明Cython可以节省大量时间。与Python相比,这也是Cython的最大改进。

n n

其他选项

n n

如果您已经了解C语言,Cython还允许访问C代码,而Cython的创建者尚未为代码添加现成的声明。然后,使用以下代码为C函数生成Python包装器并将其添加到模块dict中。

n n

%%用Cython

n

Cdefexternfrom" math.h中"    cpdefdoublesin(doublex)

n

 

n

Cython演示了许多其他功能,例如并行性。

n n

 

n

总之,如果遇到执行Python代码需要太长时间的问题,Cython可以提供一种集成且有效的方法来加速代码执行。更重要的是,如果您熟悉C语言,则可以使用Cython进一步优化代码的功能。

n

n

留言让我们分享AI学习和发展的干货。欢迎关注完整平台AI垂直类媒体“阅读核心”

n n。