作家
登录

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

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

  •  
  •             qsort_kernel(a, lo, j) 
  •  
  •         lo = i 
  •  
  •         j = hi 
  •  
  •     return a 
  • 我将他们的基准测试代码包装在一个函数中:

    1. import random 
    2.  
    3. def benchmark_qsort(): 
    4.  
    5.     lst = [ random.random() for i in range(1,5000) ] 
    6.  
    7.     qsort_kernel(lst, 0, len(lst)-1) 

    对它计时会获得:

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

    对 benchmark_qsort_numpy_cython() 函数计时会获得:

    上述代码与 C 代码异常类似。Cython 应当能很好地处理它。除了应用 Cython 和静态类型之外,让我们应用 Numpy

    数组代替列表。在数组大年夜小较大年夜时,比如数千个或更多元素,Numpy 数组确切比Python 列表更快。

    安装 Numpy 可能会花一些时光,推荐应用 Anaconda 或一个已安装了 Python 科学对象组合的 Docker 镜像。

    在应用 Cython 时,须要将 Numpy 导入到应用了 Cython 的单位中。在应用 C 类型时,还必须应用 cimport 将它作为 C 模块导入。Numpy数组应用一种表示数组元素类型和数组维数(一维、二维等)的特别语法来声明。

    1. %%cython 
    2.  
    3.   
    4.  
    5. import numpy as np 
    6.  
    7. cimport numpy as np 
    8.  
    9. cpdef np.ndarray[double, ndim=1] \ 
    10.  
    11. qsort_kernel_cython_numpy_type(np.ndarray[double, ndim=1] a, \ 
    12.  
    13. long lo, \ 
    14.  
    15. long hi): 
    16.  
    17. cdef: 
    18.  
    19. long i, j 
    20.  
    21. double pivot 
    22.  
    23. i = lo 
    24.  
    25. j = hi 
    26.  
    27.    while i < hi: 
    28.  
    29.      pivot = a[(lo+hi) // 2] 
    30.  
    31.      while i <= j: 
    32.  
    33.        while a[i] < pivot: 
    34.  
    35.          i += 1 
    36.  
    37.        while a[j] > pivot: 
    38.  
    39.          j -= 1 
    40.  
    41.        if i <= j: 
    42.  
    43.          a[i], a[j] = a[j], a[i] 
    44.  
    45.          i += 1 
    46.  
    47.          j -= 1 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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