作家
登录

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

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

  •  
  • 14 1 1405 1405.0 38.3 return [mandel_numba(complex(r, i)) for r in r1 for i in r2] 
  • 我们看到,大年夜部分时光都花费在了 mandelperf_numba() 函数的第一行和最后一行上。最后一行有点复杂,让我们将它分为两部分来再次分析:

    分析器输出变成:

    1. Timer unit:1e-06 s 
    2.  
    3. Total time:0.002002 s 
    4.  
    5. File: 
    6.  
    7. Function: mandelperf_numba at line 11 
    8.  
    9. Line # Hits Time Per Hit % Time Line Contents 
    10.  
    11. ============================================================== 
    12.  
    13. 11 def mandelperf_numba(): 
    14.  
    15. 12 1 678 678.0 33.9 r1 = np.linspace(-2.0, 0.5, 26) 
    16.  
    17. 13 1 235 235.0 11.7 r2 = np.linspace(-1.0, 1.0, 21) 
    18.  
    19. 14 1 617 617.0 30.8 c3 = [complex(r, i) for r in r1 for i in r2] 
    20.  
    21. 15 1 472 472.0 23.6 return [mandel_numba(c) for c in c3] 

    我们可以看到,对函数 mandel_numba() 的调用仅花费了总时光的 1/4。残剩时光花在 mandelperf_numba()

    函数上。花时光优化它是值得的。

    再次应用 Numpy

    应用 Cython 在这琅绫腔有太大年夜赞助,并且 Numba 不实用。摆脱词攀困境的一种办法是再次应用 Numpy。我们将以下代码调换为生成等效结不雅的 Numpy

    代码。

    Numba 似乎没什么赞助。Cython 代码运行速度快了约 5 倍:

    1. return [mandel_numba(complex(r, i)) for r in r1 for i in r2] 

    此代码构建了所谓的二维网格。它计算由 r1 和 r2 供给坐标的点的复数表示。点 Pij 的坐标为 r1[i] 和 r2[j]。Pij 经由过程复数 r1[i] +

    1j*r2[j] 进行表示,个中特别常量 1j 表示单个虚数 i。

    我们可以直接编写此计算的代码:

    1. @jit 
    2.  
    3. def mandelperf_numba_mesh(): 
    4.  
    5.     width = 26 
    6.  
    7.     height = 21 
    8.  
    9.     r1 = np.linspace(-2.0, 0.5, width) 
    10.  
    11.     r2 = np.linspace(-1.0, 1.0, height) 
    12.  
    13.     mandel_set = np.zeros((width,height), dtype=int
    14.  
    15.     for i in range(width): 
    16.  
    17.         for j in

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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