scipy.sparse.linalg.
SuperLU#
- class scipy.sparse.linalg.SuperLU#
稀疏矩阵的LU分解。
因式分解表示为:
Pr @ A @ Pc = L @ U
要构造这些
SuperLU
对象,请调用splu
和spilu
函数。- 属性:
shape
原始矩阵的形状,以整数元组表示。
nnz
矩阵中非零元素的数量。
perm_c
排列 Pc 表示为一个索引数组。
perm_r
排列 Pr 表示为一个索引数组。
L
单位对角线下三角因子作为
scipy.sparse.csc_matrix
。U
上三角因子作为
scipy.sparse.csc_matrix
。
方法
solve
(rhs[, trans])求解具有一个或多个右端项的线性方程组。
注释
Added in version 0.14.0.
示例
LU 分解可以用于求解矩阵方程。考虑:
>>> import numpy as np >>> from scipy.sparse import csc_matrix >>> from scipy.sparse.linalg import splu >>> A = csc_matrix([[1,2,0,4], [1,0,0,1], [1,0,2,1], [2,2,1,0.]])
这可以针对给定的右端求解:
>>> lu = splu(A) >>> b = np.array([1, 2, 3, 4]) >>> x = lu.solve(b) >>> A.dot(x) array([ 1., 2., 3., 4.])
lu
对象还包含分解的显式表示。置换以索引映射的形式表示:>>> lu.perm_r array([2, 1, 3, 0], dtype=int32) # may vary >>> lu.perm_c array([0, 1, 3, 2], dtype=int32) # may vary
L 和 U 因子是 CSC 格式的稀疏矩阵:
>>> lu.L.toarray() array([[ 1. , 0. , 0. , 0. ], # may vary [ 0.5, 1. , 0. , 0. ], [ 0.5, -1. , 1. , 0. ], [ 0.5, 1. , 0. , 1. ]]) >>> lu.U.toarray() array([[ 2. , 2. , 0. , 1. ], # may vary [ 0. , -1. , 1. , -0.5], [ 0. , 0. , 5. , -1. ], [ 0. , 0. , 0. , 2. ]])
置换矩阵可以被构造:
>>> Pr = csc_matrix((np.ones(4), (lu.perm_r, np.arange(4)))) >>> Pc = csc_matrix((np.ones(4), (np.arange(4), lu.perm_c)))
我们可以重新组装原始矩阵:
>>> (Pr.T @ (lu.L @ lu.U) @ Pc.T).toarray() array([[ 1., 2., 0., 4.], [ 1., 0., 0., 1.], [ 1., 0., 2., 1.], [ 2., 2., 1., 0.]])