加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

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

发布时间:2019-09-03 03:59:40 所属栏目:建站 来源:AI中国
导读:先容 假如你曾用Python编写代码,那么你也许花了更多的时刻守候某些代码块的执行,而不是你想要的。固然有一些要领可以使您的代码更有用,但它很也许如故比C代码慢。这首要归结为Python是一种动态编程说话,并将很多对象移动到C说话编译时代处理赏罚的运行时。

先容

假如你曾用Python编写代码,那么你也许花了更多的时刻守候某些代码块的执行,而不是你想要的。固然有一些要领可以使您的代码更有用,但它很也许如故比C代码慢。这首要归结为Python是一种动态编程说话,并将很多对象移动到C说话编译时代处理赏罚的运行时。

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

不外,假如你像我一样喜好用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提供了一种很是整齐且高效的要领来加快您的代码。最重要的是,它提供了很多进一步优化您的相助的成果。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读