最近在编写贝叶斯概率预报方面的程序,遇到了程序运行时间慢的问题。对单站处理来说,可能影响不大,但是如果加个循环,几百个站点需要计算的话,这时间就是几百倍的差异了。当然也可以选择采用多线程并行计算的方式,对于普通台式机来说有点不合适,上服务器的话,有点浪费。本着节约的精神,首先从原程序本身入手,找到耗时比较多的函数进行优化。所用的性能分析工具为python自带的cProfile模块,下面讲解如何使用:
我是在spyder编辑器中执行python程序的,程序运行过后,在IPython console工作区输入
import cProfile
cProfile.run('calFaiy(obs,fore,x)',sort="cumulative")
这样就能清楚的看到calFaiy(obs,fore,x)函数的耗时,非常的清楚。
找到耗时较多的函数,逐一进行改进,程序的性能可有数量级的提升。同时也发现了自己在编程中不规范的地方,有些变量不应该放在循环里的,或者可以独立出来计算的,都没有设计好,后期需要注意。
附运行截图: