【发布时间】:2014-03-08 18:03:54
【问题描述】:
Matlab 使用 sparse 命令计算对角矩阵的逆矩阵需要 0.02 秒。
P = diag(1:10000);
P = sparse(P);
tic;
A = inv(P);
toc
但是,对于 Python 代码,这需要很长时间 - 几分钟。
import numpy as np
import time
startTime = time.time()
P = np.diag(range(1,10000))
A = np.linalg.inv(P)
runningTime = (time.time()-startTime)/60
print "The script was running for %f minutes" % runningTime
我尝试使用 Scipy.sparse 模块,但没有帮助。运行时间减少了,但只有 40 秒。
import numpy as np
import time
import scipy.sparse as sps
import scipy.sparse.linalg as spsl
startTime = time.time()
P = np.diag(range(1,10000))
P_sps = sps.coo_matrix(P)
A = spsl.inv(P_sps)
runningTime = (time.time()-startTime)/60
print "The script was running for %f minutes" % runningTime
是否可以像在 Matlab 中一样快地运行代码?
【问题讨论】:
-
将矩阵存储为 P_sps = sps.dia_matrix(P) 会有所改进,但 Matlab 代码仍然快 3 个数量级
-
真正的问题是为什么你觉得需要反转矩阵。
-
在 matlab 代码中,您开始计算创建对角线并将矩阵转换为稀疏矩阵后的时间。在你之前做的python代码中。你没有公平地比较。
-
我很确定,创建大小为 10000x10000 的二维数组、存储对角线并将其转换为 csr 所花费的时间比反转对角线所花费的时间要大得多。
标签: python performance matlab numpy sparse-matrix