Python算法评估

时间评估

timeit模块是为执行相对可靠的计时操作设计的。(Linux同样有timeit命令)

例如:

>>> import timeit
>>> timeit.timeit("x = sum(range(1000))")
13.79994061900004

如果想要使用命令行对某函数进行计时,可以使用-m选项调用timeit模块。

$ python -m timeit -s "import mymodule as m" "m.myfunction()"

使用timeit模块需要避免因重复执行带来的副作用。例如对排序函数.sort()进行计时,可能只是首次运行执行了排序操作,而在其他次运行时,函数可能对已排序的结果不会执行排序操作,从而影响到对计算时间的评估。

性能评估与优化

实际过程中,我们经常猜测自己代码需要优化的是哪一部分,不如让profiler替我们找出来。cProfiler模块使用起来和timeit一样简单。如果我们的主函数是main(),我们可以像下面一样测试,打印程序中各个函数的计时结果。

import cProfiler
cProfiler.run("main()")

另外我们可以利用matplotlib将性能评估图形化,常用两类图形:

  • 反映问题规模与运行时间关系的图表
  • 运行时间的详细分布情况的盒形图(箱线图)
点赞