Python特征值计算比我计算机上的MATLAB运行速度慢得多。为什么?

时间:2011-05-18 22:15:53

标签: python matlab numpy eigenvalue

我想使用Python 2.6.5计算大型矩阵(约1000x1000)的特征值。我一直无法做到这一点。我还没有找到解决这个问题的其他线程。

当我跑步时

a = rand(1000,1000);
tic;
for i =1:10
    eig(a);
end
toc;

在MATLAB中大约需要30秒。 Python中的类似测试需要216秒。使用RPy通过R运行它并没有明显加快计算速度。 Octave的测试耗时93秒。我对速度上的差异感到有些困惑。

像我这样可以在网上找到的问题的唯一例子是this,这已经有好几年了。该问题中的海报有一个不同的Python目录结构(我将其归结为帖子的年龄,虽然我可能会弄错),所以我没有足够的信心尝试按照通讯员发布的说明进行操作。

我的包管理器说我安装了LAPACK,我使用NumPy和SciPy进行Python计算:

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 个答案:

答案 0 :(得分:14)

我认为您所看到的是Matlab使用的英特尔数学核心库(MKL)与您的系统(ATLAS,可能是?)上的任何LAPACK实现之间的差异,而scipy与之相关联。你可以看到these benchmarks中MKL的速度有多快。

我想如果你可以针对英特尔MKL库重建Scipy,你会获得更好的性能。如果您使用的是Windows,则可以从here下载预构建的副本,或者您可以考虑使用类似Enthought Python Distribution的内容。

答案 1 :(得分:3)

我确实在时间上有所不同,但没有你的那么激烈。我的MATLAB(R2010b)时间约为25秒,python(2.7)时间约为60秒。

我对这些数字并不感到惊讶,因为MATLAB只是一种数字和矩阵操作语言,它的优势在于JIT加速器超过python,这是一个通用语言。通常,MATLABpython+numpy之间的差异非常小,但在矩阵大小较大时会变得明显,就像您的情况一样。

这并不意味着没有办法改善python的性能。 scipy网站上的PerformancePython文章很好地介绍了提高python性能的不同方法。