Python Numpy中是否有内置/简单的LDU分解方法?

Python Numpy中是否有内置/简单的LDU分解方法?,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,我在numpy.linalg.cholesky中看到了cholesky分解,但找不到LDU分解。有人能推荐一个要使用的函数吗?Scipy有一个LU分解函数:。请注意,这也在混合中引入了置换矩阵P。很好地解释了为什么会发生这种情况 如果您特别需要LDU,那么您可以规范化U矩阵以拉出D 以下是您可能的做法: >>> import numpy as np >>> import scipy.linalg as la >>> a = np.array(

我在numpy.linalg.cholesky中看到了cholesky分解,但找不到LDU分解。有人能推荐一个要使用的函数吗?

Scipy有一个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.]])
试试这个:

将numpy导入为np
A=np.数组([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4])
U=np.triu(A,1)
L=np.tril(A,-1)
D=np.tril(np.triu(A))
印刷品(A)
印刷品(L)
印刷品(D)
打印(U)

看看这里:这不是一个主题外的请求,scipy中有一个函数可以实现这一点。无论是谁投票关闭的-你似乎不知道,你可能不应该看到这个标签。@cᴏʟᴅsᴘᴇᴇᴅ 它确实属于“.API请求…”;虽然这有点模糊。@user2357112我假设pivot和normal是相同的,因为排列矩阵确实被设置为恒等式。谢谢您的更正。@user2357112请先获取用户名,否则我会开始叫您Twickler。演示如何执行规范化会很有用。@user2357112已完成。这看起来是最好的内置,但令人失望的是,它给出了一个输入的非单位置换矩阵,看起来它可以在没有LU分解的情况下进行LU分解。这只适用于可逆矩阵。当
a
在您的示例中是单数时,U在对角线上将有0个条目,并且规范化过程不起作用。