gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:08:05 36 4
gpt4 key购买 nike

我在 numpy.linalg.cholesky 中看到了 cholesky 分解,但找不到 LDU 分解。任何人都可以建议使用的功能吗?

最佳答案

Scipy 有一个 LU 分解函数:scipy.linalg.lu .请注意,这还会将置换矩阵 P 引入混合中。 This answer很好地解释了为什么会发生这种情况。

如果您特别需要 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.]])

关于python - Numpy 中是否有内置/简单的 LDU 分解方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450175/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com