Python Jupyter Notebook 中的代码性能评测
2016-10-14 本文已影响180人
Datartisan数据工匠
在 notebooke 中执行 %timeit 可以输出某个函数代码的性能测评结果:
![](https://img.haomeiwen.com/i1818544/e8b280cc6a95812c.png)
上面的结果是对函数执行时间的一个度量,它直接反映的是一个函数代码在某个固定时间中循环执行的次数。通常来说,同样效果的代码loops之前的数字越大,代码的执行时间就越短,性能也越高。
在 notebooke 中执行 %%timeit 则可以方便我们整体考察一个代码段的执行时间:
![](https://img.haomeiwen.com/i1818544/17558356550fc8ab.png)
可以发现,相比于我们的前一段代码,这段代码的执行时间要漫长得多。接下来,我们将教大家一些方法来改变评测结果的输出格式:
![](https://img.haomeiwen.com/i1818544/bc4b6e3c9ef6a4b0.png)
上面为我们之前用过的 %timeit 命令,将其改为 %timeit ,并加上一些说明文字,会是代码执行时间评测的输出结果更为丰满。
例如我们现在来测评一下一个排序函数的执行时间,首先是对于一个无序列表的排序:
![](https://img.haomeiwen.com/i1818544/19ef94f2b7eb51ce.png)
接下来,我们考察一下用同样的函数对一个已经排好序的列表进行排序的执行时间情况:
![](https://img.haomeiwen.com/i1818544/45a7429b2674dab3.png)
上面两段代码的输出结果都包含了 CPU times 与 Wall times 两项,分别表示算法执行的CPU时间与网络挂钟时间。可以看到,对于已经排好序的列表,执行排序算法所需花费的时间要明显短得多。
与 %%timeit 类似的道理,执行 %%time 也可以方便我们整体考察一个代码段的执行时间:
![](https://img.haomeiwen.com/i1818544/d82edd53a515663f.png)
执行 %prun 命令,可以在 notebooke 中更为详细地查看关于代码执行时间的信息:
![](https://img.haomeiwen.com/i1818544/0e06588a71d84175.png)
我们将在底部的弹窗中看到以下内容,它很详细地告诉了我们函数中每一个步骤的执行时间:
![](https://img.haomeiwen.com/i1818544/cd583253e1dfda90.png)
另外,在 notebooke 中执行 %load_ext 可以帮助我们快捷载入一些外部的分析器:
载入性能分析器 line_profiler
![](https://img.haomeiwen.com/i1818544/375c741b843a8699.png)
载入内存分析器memory_profiler
![](https://img.haomeiwen.com/i1818544/3003d847eeabc3f8.png)
可以看到,这些分析器能够帮助我们了解包括内存占用等更多的信息。
此外,我们还可以用 %%file 命令将我们的算法作为py脚本保存,以方便我们执行魔法命令 %mprun 或 %lprun 来对算法性能进行分析:
![](https://img.haomeiwen.com/i1818544/571807b53327a0bf.png)
弹窗内容如下:
![](https://img.haomeiwen.com/i1818544/62004f4b7fdfd4ac.png)
复制链接,通过电脑学习效果最佳:http://datacademy.io/lesson/64
![]()