![](/img/trans.png)
[英]How come that scipy.linalg.lu() does not return the same L matrix as scipy.sparse.linalg.splu()?
[英]Why is 'scipy.sparse.linalg.spilu' less efficient than 'scipy.linalg.lu' for sparse matrix?
我在https://scicomp.stackexchange.com上发布了这个问题,但没有受到关注。 只要我在其中一个中得到答案,我就会在另一个中通知。
我有一个稀疏矩阵B
并尝试使用一个 function scipy.sparse.linalg.spilu
专门用于稀疏矩阵来分解B
。 你能解释一下为什么这个 function 比 function scipy.linalg.lu
的效率明显低吗? 太感谢了!
import numpy as np
import scipy.linalg as la
import scipy.sparse.linalg as spla
import time
from scipy import sparse
from scipy.sparse import csc_matrix
A = np.random.randint(100, size=(10000, 10000))
B = np.triu(A, -100)
start = time.time()
(P, L, U) = la.lu(B)
end = time.time()
print('Time to decompose B with lu =', end - start)
start = time.time()
mtx = spla.spilu(csc_matrix(B))
end = time.time()
print('Time to decompose B with spilu =', end - start)
计算时间为
Time to decompose B with lu = 4.7765138149261475
Time to decompose B with spilu = 14.165712594985962
(B==0).sum()
Out[5]: 49510694
B.shape
Out[6]: (10000, 10000)
(B==0).sum()/100000000
Out[7]: 0.49510694
您的矩阵 B 一点也不稀疏。 B 中超过一半的元素是非零的。 当然 spilu 在处理如此密集的矩阵时效率会降低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.