如何打印使用SuperLU的splu
计算的稀疏L和U矩阵?
我的MWE:
>>> import scipy
>>> import scipy.sparse
>>> import scipy.sparse.linalg
>>> from numpy import array
>>> M = scipy.array([ [19,0,21,21,0],[12,21,0,0,0],[0,12,16,0,0],[0,0,0,5,21],[12,12,0,0,18] ])
>>> cscM = scipy.sparse.csc_matrix(M)
>>> lu_obj = scipy.sparse.linalg.splu(cscM)
>>> b = array([1, 2, 3, 4, 5])
>>> lu_obj.solve(b)
array([ 0.01245301, 0.08812209, 0.12140843, -0.08505639, 0.21072771])
答案 0 :(得分:2)
浏览scipy docs和source,scipy.sparse.linalg.splu确实使用了SuperLU。看起来SuperLU可能没有明确地计算L或U.L& U比原始稀疏矩阵更容易密集,因此如果不需要它们,则避免存储它们是有意义的。如果是任何安慰,您的lu_obj
确实包含L& amp; amp;你:lu_obj.perm_c, lu_obj.perm_r
。
获得L& U,最少工作的路径是使用scipy.linalg.lu
来获取LU矩阵。但是,您必须将稀疏矩阵转换为密集矩阵。即
P, L, U = scipy.linalg.lu(cscM.todense())
答案 1 :(得分:2)
你可以使用
lu_obj = scipy.sparse.linalg.splu(A)
L,R = lu_obj.L, lu_obj.R
在当前的scipy版本中,它返回csc格式的矩阵(scipy docs)。