不可否认,如果程序编写不当或者选择的类库不合适,Python的运算速度确实可能很慢。但如果了解了提高Python性能的技巧,则Python可以在几乎任何领域都表现出高性能,常见的方法是使用高性能类库和多CPU线程并行计算。从下面的几个典型的例子可以看出,进行海量计算时,为提高计算性能而需要注意的一些问题。
以大数据分析领域中的金融分析为例,其常见任务是重复性地进行复杂公式的计算。Python语言本身提供了实现这些任务的函数,例如计算下面的2 500万次数学公式的程序:
上面代码使用基础Python函数计算了2 500万次3log(x)+cos(x)2,耗时22.6秒。
使用numpy类库,也可以完成上述的任务,其实现代码如下:
import numpy as np
loops=25000000
a=np.arange(1,loops)
%timeit r=3*np.log(a)+np.cos(a)**2 #此语句在anaconda的console窗口[in]后输入
1 loops,best of 3:979 ms per loop
程序运行耗时979毫秒,计算速度得到了飞跃性的提高。这是由于numpy对计算进行了优化处理,所以性能必定优于基础Python。
除了numpy外,还有一些类库更具针对性。例如numexpr(Numerical Expression,数值表达式),它改善numpy通用功能的性能,避免程序执行期间数组在内存中复制,且可以方便地设置线程数而完成并行计算,达到提高计算性能的目的。
import numexpr as ne
import numpy as np(www.daowen.com)
ne.set_num_threads(1) # 使用一个线程
loops=25000000
a=np.arange(1,loops)
f=ˈ3*log(a)+cos(a)**2ˈ
%timeit r=ne.evaluate(f) #此语句在anaconda的console窗口[in]中输入
1 loops,best of 3:657 ms per loop
使用numexpr后,使程序的运行时间降低至657毫秒。
上面程序代码中,只使用了一个线程[语句ne.set_num_threads(1)]。目前,很多的PC机都提供多核、多线程支持。将上述程序中设置线程的语句修改为:
ne.set_num_threads(4)
即可使用4个线程,在同一台电脑上,耗时进一步缩减为323毫秒。
从上面的例子可以看出,对于同一个任务,用基础Python需要耗时22.6秒,但通过使用合理的类库进行优化,最终可以实现提升速度70倍,用0.32秒完成。特别值得关注的是,这种性能的改善,并不需要编程者了解有关编译、并行计算等专业化的编程知识,即使非计算机专业人士也可方便实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。