我电脑上Python的特征值计算比MATLAB慢,为什么?
我想用Python 2.6.5来计算一些比较大的矩阵(大约1000x1000)的特征值。但我发现速度很慢,一直没找到其他人讨论这个问题的帖子。
当我在MATLAB中运行
a = rand(1000,1000);
tic;
for i =1:10
eig(a);
end
toc;
时,大约需要30秒。而在Python中做同样的测试却要216秒。通过RPy在R中运行也没有明显加快计算速度。在Octave中测试则需要93秒。我对这种速度差异感到有些困惑。
我在网上找到的唯一类似的问题是这个,但那是几年前的帖子。发帖的人使用的Python目录结构和我不一样(我觉得可能是因为帖子太旧了,当然我也可能错了),所以我不太敢按照那里的说明去做。
我的包管理器显示我已经安装了LAPACK,并且在Python计算中使用了NumPy和SciPy:
from numpy import *
from scipy import *
from numpy.linalg import *
import time
a = randn(1000,1000)
tic = time.clock()
for i in range(0,10):
eig(a)
toc = time.clock()
print "Elapsed time is ", toc-tic
我对Python还很陌生,可能做了什么傻事。如果需要我提供更多信息,请告诉我。
2 个回答
3
我确实看到时间上有差别,但没有你说的那么大。我用的 MATLAB
(R2010b)大约需要25秒,而 python
(2.7)大约需要60秒。
这些数字我倒不太惊讶,因为 MATLAB
主要是用来处理数字和矩阵的,它在这方面比 python
有优势,尤其是 MATLAB
有个叫 JIT
的加速器,而 python
是个通用语言。一般来说,MATLAB
和 python+numpy
之间的差别不大,但当矩阵很大的时候,这个差别就会显现出来,就像你说的那样。
这并不意味着没有办法提高 python
的性能。你可以去看看 PerformancePython 这篇文章,它在 scipy 的网站上,介绍了几种可以提升 python
性能的方法。