"为什么在我的电脑上,Python特征值计算比MATLAB要慢得多?"

2024-05-17 04:02:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python2.6.5计算大型ish矩阵(约1000x1000)的特征值。我不能这么快就做。我没有找到任何其他的线索来解决这个问题。在

当我跑的时候

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

在MATLAB中大约需要30秒。在Python中进行类似的测试需要216秒。使用RPy在R中运行它并没有显著加快计算速度。八度音阶测试用了93秒。我对速度的差异有点困惑。在

我在网上找到的唯一一个类似问题的例子是this,它已经有好几年的历史了。这个问题中的海报有一个不同的Python目录结构(我把它归因于帖子的年代,尽管我可能会弄错),所以我没有足够的信心去尝试按照通讯员发布的指示进行操作。在

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

^{pr2}$

我对Python还很陌生,所以我可能做了些傻事。如果我需要提供更多信息,请告诉我。在


Tags: for矩阵ticendmatlabish特征值rand
2条回答

我想你看到的是Matlab使用的英特尔数学内核库(MKL)与你的系统上的任何LAPACK实现(也许是ATLAS?)之间的区别那个小淘气被联系起来了。您可以看到MKL在these benchmarks中的速度有多快。在

我想,如果能够针对“英特尔MKL”库重建Scipy,那么性能会更好。如果您使用的是Windows,可以从here下载预构建的副本,或者您可以考虑使用类似于热情的Python发行版。在

我确实在时间安排上有所不同,但不像你那样激烈。我的MATLAB(R2010b)计时为~25秒,python(2.7)为~60秒。在

我对这些数字并不感到惊讶,因为MATLAB仅仅是一种数值和矩阵操作语言,而且它的JIT加速器比通用语言python具有优势。一般来说,MATLAB和{}之间的差异非常小,但是当矩阵大小很大时,就会变得明显,就像您的例子一样。在

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

相关问题 更多 >