作家
登录

如何让Python像Julia一样快地运行

作者: 来源: 2017-05-22 13:13:15 阅读 我要评论

我信赖,应当在更复杂的代码上对说话履行基准测试。Python 与 Julia 比较–一个来自机械进修的示例中供给了一个不错的示例。在该文┞仿中,Julia 似乎优于 Cython。如不雅我有时光,我会应用 Numba试一下。

在 Python 3 中,我们可以应用 functools 标准库来避免这些反复的计算。

结不雅为:

请留意,此代码应用了 Python 同时分派两个局部变量的才能。对它计时会获得:

对此函数计时会获得:

  1. 1000000 loops, best of 3:910 ns per loop 

速度又增长了 40 倍,比最初的 Python 代码快约 3,600 倍!推敲到我们仅向递归函数添加了一条注释,此结不雅异常令人难忘。

Python 2.7 中没有供给这种主动缓存。我们须要显式地转换代码,才能避免这种情况下的反复计算。

  1. 1000000 loops, best of 3:1.77 µs per loop 

我们又快了 20 倍!让我们在应用和不应用静态类型的情况下编译我们的函数。请留意,我们应用了 cdef 关键字来键入局部变量。

  1. %%cython 
  2.  
  3.   
  4.  
  5. def fib_seq_cython(n): 
  6.  
  7.    if n < 2: 
  8.  
  9.         return n 
  10.  
  11.     a,b = 1,0 
  12.  
  13.     for i in range(n-1): 
  14.  
  15.         a,b = a+b,a 
  16.  
  17.     return a 
  18.  
  19. cpdef long fib_seq_cython_type(long n): 
  20.  
  21.     if n < 2: 
  22.  
  23.         return n 
  24.  
  25.     cdef long a,b 
  26.  
  27.     a,b = 1,0 
  28.  
  29.     for i in range(n-1): 
  30.  
  31.         a,b = a+b,b 
  32.  
  33.     return a 

我们可在一个单位中对两个版本计时:

  1. %timeit fib_seq_cython(20) 
  2.  
  3. %timeit fib_seq_cython_type(20) 
  1. 1000000 loops, best of 3:953 ns per loop 
  2.  
  3. 10000000 loops, best of 3:51.9 ns per loop 

静态类型代码如今花费的时光为 51.9 纳秒,比最初的基准测试快约 60,000(六万)倍。

如不雅我们想计算随便率性输入的 Fibonacci 数,我们应保持应用无类型版本,该版本的运行速度快 3,500 倍。还不错,对吧?

应用 Numba 编译

让我们应用另一个名为 Numba 的对象。它是针对部分 Python 版本的一个即时

(jit) 编译器。它不是对所有 Python 版本都实用,但在实用的情况下,它会带来事业。

  1. def parse_int_vec(): 
  2.  
  3.     n = np.random.randint(0,2**32-1,1000) 
  4.  
  5.         for i in

      推荐阅读

      云原生安全初创公司Aporeto融资1120万美元

    Aporeto是一家“云原生”的安然始创公司,旨在确保那些不受信的IT情况的安然性。该公司方才在A轮融资——也就是岁尾产品宣布之前——获得了>>>详细阅读


    本文标题:如何让Python像Julia一样快地运行

    地址:http://www.17bianji.com/lsqh/35343.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)