如何手动重建由lu_factor分解的矩阵 A ? ( A = PLU )
由于矩阵 P 的设置,我当前的尝试都失败了。以下是我到目前为止的情况:
A = np.random.rand(3,3)
lu, piv = lu_factor(A)
U = np.triu(lu)
L = np.tril(lu, -1)
L[np.diag_indices_from(L)] = 1.0
我正在寻找矩阵 P ,使这行打印 True :
print np.allclose(A, np.dot(P, np.dot(L, U)))
任何提示/链接/建议都表示赞赏!
答案 0 :(得分:4)
需要按顺序解释置换向量。如果piv=[1,2,2]
则需要按顺序完成以下操作(使用从零开始的索引):
在代码中,这可以解决问题:
P = np.eye(3)
for i, p in enumerate(piv):
Q = np.eye(3,3)
q = Q[i,:].copy()
Q[i,:] = Q[p,:]
Q[p,:] = q
P = np.dot(P, Q)
对于piv=[1,2,2]
P 是
[[ 0. 0. 1.]
[ 1. 0. 0.]
[ 0. 1. 0.]]
这可能不是一种非常快速的计算 P 的方法,但它可以解决这个问题。