我想使用Python 2.6.5计算较大矩阵(大约1000x1000)的特征值。但我发现计算速度很慢,而且没有找到其他解决此问题的线程。在运行时,代码如下:
a = rand(1000,1000);
tic;
for i =1:10
eig(a);
end
toc;
在MATLAB中计算需要大约30秒,在Python中进行类似的测试需要216秒。使用RPy运行它并没有显著加快计算速度。在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还不太了解,所以可能做错了什么。如果需要更多信息,请告诉我。
rand
(均匀分布)或randn
(正态分布),但不要混用它们。这并没有解释它们之间的区别。 - Woksvd
的时间会是多少?另外,请正确重新格式化您的代码,不要导入您没有使用的内容,并请尽量避免使用习语from . import *
。谢谢。 - eatsvd
(没有循环的情况下为3秒)和eigvals
(12秒),与eig
的30秒相比较。虽然使用svd
,你只能得到a'*a的奇异值,而不是a本身。 - Wok