【发布时间】:2011-08-28 10:39:26
【问题描述】:
我想使用 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 很陌生,所以我可能做了一些愚蠢的事情。如果我需要提供更多信息,请告诉我。
【问题讨论】:
-
你在 Python 和 Matlab 中使用的精度是一样的吗?
-
您确实需要确保您在 Python 代码中的缩进是完全正确的。您的示例无法按书面方式运行。
-
只是为了让您知道您应该同时使用
rand(均匀分布)或randn(正态分布),但不要混合使用它们。但这并不能解释差异。 -
svd的时间安排是什么?另外,请正确重新格式化您的代码,不要导入您不使用的东西,并尽量避免使用成语from . import *。谢谢 -
我尝试了
svd(3 秒没有循环)和eigvals(12 秒),与eig的 30 秒相比。虽然,使用svd,您只能得到 a'*a 的奇异值,而不是 a。
标签: python matlab numpy eigenvalue