温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Is there a built-in/easy LDU decomposition method in Numpy?
linear-algebra numpy python

python - Numpy中是否有内置/简易的LDU分解方法?

发布于 2021-02-03 13:27:16

我在numpy.linalg.cholesky中看到cholesky分解,但是找不到LDU分解。谁能建议要使用的功能?

查看更多

提问者
user1559897
被浏览
0
Praveen 2017-08-02 11:00

Scipy具有LU分解功能:scipy.linalg.lu请注意,这还会P在混合中引入置换矩阵这个答案很好地解释了为什么会发生这种情况。

如果您特别需要LDU,则可以对U矩阵进行归一化以提取出D

您可以按照以下方式进行操作:

>>> import numpy as np
>>> import scipy.linalg as la
>>> a = np.array([[2, 4, 5],
                  [1, 3, 2],
                  [4, 2, 1]])
>>> (P, L, U) = la.lu(a)
>>> P
array([[ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 1.,  0.,  0.]])
>>> L
array([[ 1.        ,  0.        ,  0.        ],
       [ 0.5       ,  1.        ,  0.        ],
       [ 0.25      ,  0.83333333,  1.        ]])
>>> U
array([[ 4. ,  2. ,  1. ],
       [ 0. ,  3. ,  4.5],
       [ 0. ,  0. , -2. ]])
>>> D = np.diag(np.diag(U))   # D is just the diagonal of U
>>> U /= np.diag(U)[:, None]  # Normalize rows of U
>>> P.dot(L.dot(D.dot(U)))    # Check
array([[ 2.,  4.,  5.],
       [ 1.,  3.,  2.],
       [ 4.,  2.,  1.]])