使用scipy打印由SuperLU计算的L和U矩阵

时间:2013-05-25 03:43:04

标签: io scipy

如何打印使用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])

2 个答案:

答案 0 :(得分:2)

浏览scipy docssource,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)