应用 Cython 会获得:
- 100 loops, best of 3:1.94 ms per loop
comprehension)。是以,我们不克不及将它应用到第二个函数,但我们可以将它应用到第一个函数。我们的代码类似以下代码。
- @jit
- def mandel_numba(z):
- maxiter = 80
- c = z
- for n in range(maxiter):
- if abs(z) > 2:
- return n
- z = z*z + c
- return maxiter
- def mandelperf_numba():
- r1 = np.linspace(-2.0, 0.5, 26)
- r2 = np.linspace(-1.0, 1.0, 21)
- return [mandel_numba(complex(r, i)) for r in r1 for i in r2]
对它计时会获得:
- 1000 loops, best of 3:503 µs per loop
还不错,比 Cython 快 4 倍,比最初的 Python 代码快 9 倍!
我们还能做得更好吗?要知道是否能做得更好,一种方法是分析代码。内置的 %prun 分析器在这里不敷精确,我们必须应用一个称为 line_profiler 的更好的分析器。它可以经由过程pip 进行安装:
- pip install line_profiler
安装后,我们须要加载它:
- %load_ext line_profiler
然后应用一个神奇的敕令分析该函数:
- %lprun -s -f mandelperf_numba mandelperf_numba()
它在一个弹出窗口中输出以下信息。
我认为这些小型的基准测试没有供给哪种说话最快的明白谜底。举例而言, randmatstat 示例处理 5×5 矩阵。应用 Numpy 数组处理它有点小题大年夜做。应当应用更大年夜的矩阵履行基准测试。
- Timer unit:1e-06 s
- Total time:0.003666 s
- File:
- Function: mandelperf_numba at line 11
- Line # Hits Time Per Hit % Time Line Contents
- ==============================================================
- 11 def mandelperf_numba():
- 12 1 1994 1994.0 54.4 r1 = np.linspace(-2.0, 0.5, 26)
- 13 1 267 267.0 7.3 r2 = np.linspace(-1.0, 1.0, 21)
推荐阅读
Aporeto是一家“云原生”的安然始创公司,旨在确保那些不受信的IT情况的安然性。该公司方才在A轮融资——也就是岁尾产品宣布之前——获得了>>>详细阅读
地址:http://www.17bianji.com/lsqh/35343.html
1/2 1