如何理解scipy.linalg.lu_factor的枢轴矩阵?

Wol*_*tan 4 python numpy scipy

如何手动重构经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
Run Code Online (Sandbox Code Playgroud)

我正在寻找使这行打印True的矩阵P

print np.allclose(A, np.dot(P, np.dot(L, U)))
Run Code Online (Sandbox Code Playgroud)

任何提示/链接/建议表示赞赏!

Wol*_*tan 5

排列向量需要按顺序解释。如果piv=[1,2,2]是这样,则需要按顺序执行以下操作(使用从零开始的索引):

  1. 第0行随第1行更改
  2. 新的第1行随第2行和
  3. 新的第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)
Run Code Online (Sandbox Code Playgroud)

对于piv=[1,2,2] P

[[ 0.  0.  1.]
 [ 1.  0.  0.]
 [ 0.  1.  0.]]
Run Code Online (Sandbox Code Playgroud)

这可能不是计算P的非常快的方法,但可以解决问题并回答问题。

  • 不是交换 Q 的行并设置 P = P.dot(Q),您可以按照您为行描述的相同顺序就地交换 P 的 *columns*。 (2认同)