Jam*_*e D 13 python matlab numpy eigenvalue
我想使用Python 2.6.5计算大型矩阵(约1000x1000)的特征值.我一直无法做到这一点.我还没有发现任何其他线程来解决这个问题.
我跑的时候
a = rand(1000,1000);
tic;
for i =1:10
eig(a);
end
toc;
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,所以我可能做了些傻事.如果我需要提供更多信息,请告诉我.
Ray*_*Ray 15
我认为您所看到的是Matlab使用的英特尔数学核心库(MKL)与您在系统上的任何LAPACK实现(ATLAS,可能是?)之间的差异,而scipy与之相关联.您可以看到MKL在这些基准测试中的速度有多快.
我想如果你能够针对英特尔MKL库重建Scipy,你会获得更好的性能.如果您使用的是Windows,可以从此处下载预构建的副本,或者您可以考虑使用类似Enthought Python Distribution的内容.
我确实在时间上有所不同,但没有你的那么剧烈。我的MATLAB(R2010b) 计时约为 25 秒,python(2.7) 计时约为 60 秒。
我对这些数字并不感到惊讶,因为它只是一种数字和矩阵操作语言,并且它比通用语言具有加速器MATLAB的优势。一般来说,和 之间的差异非常小,但当矩阵大小很大时,就像你的情况一样,差异就会变得明显。JITpythonMATLABpython+numpy
这并不意味着没有方法可以提高 python 的性能。scipy 网站上的 PerformancePython文章很好地介绍了提高 python 性能的不同方法。
| 归档时间: |
|
| 查看次数: |
2880 次 |
| 最近记录: |