zoukankan      html  css  js  c++  java
  • 用Cython加速Python代码

    安装Cython

    pip install Cython
    

    如何使用

    要在我们的笔记本中使用Cython,我们将使用IPython magic命令。Magic命令以百分号开始,并提供一些额外的功能,这些功能可以增强工作流。通常,有两种类型的Magic命令:

    1. 行magic由单个“%”表示,并且只在一行输入进行操作

    2. 单元格magic由两个“%”表示,并在多行输入上操作。

    让我们开始:

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

    %load_ext Cython
    

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

    %%cython
    

    完成这些之后,就可以开始编写Cython代码了。

    Cython可以跑多快

    与普通Python代码相比,Cython的速度快多少实际上取决于代码本身。例如,如果您正在运行具有许多变量的计算开销较大的循环,Cython将大大优于常规Python代码。递归函数也会使Cython比Python快很多。

    让我们用斐波那契数列来证明这一点。简单地说,这个算法通过把前两个数相加找到下一个数。下面是Python中可能出现的情况:

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

    运行代码:

    %%time
    
    fibonacci(39)
    

    结果:

    CPU times: user 8.39 s, sys: 78.6 ms, total: 8.47 s
    Wall time: 8.43 s
    
    39088169
    

    正如所见,找到序列的第39个数字花费了8.39秒,这里Wall time是指从函数调用开始到结束所花费的总时间。
    接下来在magic命令行后面添加-a有何不同:

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

    运行结果如下:

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

    运行代码看下能有多快:

    %%time
    fibonacci_c(39)
    

    运行结果如下:

    CPU times: user 4.85 s, sys: 49.7 ms, total: 4.9 s
    Wall time: 4.89 s
    39088169
    

    本例中,Cython的速度大约是Python的5.8倍。这清楚地展示了利用Cython节省时间的能力,与常规Python代码相比,Cython提供了最大的改进。

    文章参考于网络,如有侵权,请联系删除

  • 相关阅读:
    SASS搭建流程
    Javascript模块化编程(一)
    Javascript模块化编程发展历史
    jQuery文档处理
    jQuery事件对象
    软件开发中的11个系统思维定律
    Silverlight实例教程 理解Navigation导航框架Frame类
    eclipse自动关闭的原因
    你应该知道的15个Silverlight诀窍
    Eclipse 启动不起来异常:JVM terminated. Exit code=1
  • 原文地址:https://www.cnblogs.com/hankleo/p/11334966.html
Copyright © 2011-2022 走看看