作家
登录

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

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

  •  
  •      if lo < j: 
  •  
  •        qsort_kernel_cython_numpy_type(a, lo, j) 
  •  
  •      lo = i 
  •  
  •      j = hi 
  •  
  •    return a 
  •  
  •   
  •  
  • cpdef benchmark_qsort_numpy_cython(): 
  •  
  •   lst = np.random.rand(5000) 
  •  
  •   qsort_kernel_cython_numpy_type(lst, 0, len(lst)-1) 
    1. 1000 loops, best of 3:1.32 ms per loop 
    1. def benchmark_sort_numpy(): 
    2.  
    3. lst = np.random.rand(5000) 
    4.  
    5. np.sort(lst) 

    会获得:

    1. 1000 loops, best of 3:350 µs per loop 

    我们如今比最初的基准测试快 52 倍!Julia 在该基准测试上花费了 419 微秒,是以编译的 Python 快 20%。

    我知道,一些读者会说我不会进行同类比较。我不合意。请记住,我们如今的义务是应用主机说话以最佳的方法排序输入数组。在这种情况下,最佳办法是应用一个内置的函数。

    分析代码

    我们如今来看看第三个示例,计算 Mandelbrodt 集。Julia 团队应用了这段 Python 代码:

    我们比最初的基准测试快了约 15 倍,但这仍然不是应用 Python 的最佳办法。最佳办法是应用 Numpy 内置的 sort()函数。它的默认行动是应用快速排序算法。对此代码计时:

    1. def mandel(z): 
    2.  
    3.     maxiter = 80 
    4.  
    5.     c = z 
    6.  
    7.     for n in range(maxiter): 
    8.  
    9.         if abs(z) > 2: 
    10.  
    11.             return n 
    12.  
    13.         z = z*z + c 
    14.  
    15.      return maxiter 
    16.  
    17.  
    18. def mandelperf(): 
    19.  
    20.     r1 = np.linspace(-2.0, 0.5, 26) 
    21.  
    22.     r2 = np.linspace(-1.0, 1.0, 21) 
    23.  
    24.     return [mandel(complex(r, i)) for r in r1 for i in r2] 
    25.  
    26.   
    27.  
    28. assert sum(mandelperf()) == 14791 

    最后一行是一次合理性检查。对 mandelperf() 函数计时会获得:

    1. 100 loops, best of 3:4.62 ms per loop 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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