Python 特征值计算的运行速度比我电脑上的 MATLAB 慢得多.为什么



我想用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秒。我对速度的差异有点困惑。

我能在网上找到的唯一像这样的问题的例子是这个,它已经有好几年了。该问题中的海报具有不同的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很陌生,所以我可能做了一些愚蠢的事情。如果我需要提供更多信息,请告诉我。

我认为您所看到的是 Matlab 使用的英特尔数学核心库 (MKL) 与您系统上的任何 LAPACK 实现(也许是 ATLAS?)之间的区别。您可以看到 MKL 在这些基准测试中的速度有多快。

我想,如果您能够针对英特尔 MKL 库重建 Scipy,您将获得更好的性能。如果您使用的是Windows,则可以从此处下载预构建的副本,或者您可以考虑使用Enthought Python Distribution之类的东西。

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

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

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

最新更新