numpy.linalg.cholesky #

利纳尔格。乔列斯基( a ) [来源] #

乔列斯基分解。

返回方阵a的 Cholesky 分解L * LH ,其中L是下三角矩阵,.H 是共轭转置运算符(如果a是实值, 则为普通转置)。 a必须是埃尔米特式(如果是实值则对称)并且是正定的。不执行任何检查来验证a是否为埃尔米特式。此外,仅 使用a的下三角元素和对角线元素。实际上只返回L。

参数
一个(…, M, M) 类似数组

Hermitian(如果所有元素都是实数,则对称),正定输入矩阵。

返回
L (…, M, M) 类数组

a的下三角 Cholesky 因子。如果a是矩阵对象,则返回矩阵对象 。

加薪
林算法错误

如果分解失败,例如,如果a不是正定的。

也可以看看

scipy.linalg.cholesky

SciPy 中的类似功能。

scipy.linalg.cholesky_banded

Cholesky 分解带状 Hermitian 正定矩阵。

scipy.linalg.cho_factor

矩阵的 Cholesky 分解,用于scipy.linalg.cho_solve.

笔记

1.8.0 版本中的新增功能。

广播规则适用,numpy.linalg详细信息请参阅文档。

Cholesky 分解通常用作求解问题的快速方法

\[A \mathbf{x} = \mathbf{b}\]

(当A是埃尔米特/对称且正定时)。

首先,我们解决\(\mathbf{y}\)

\[L \mathbf{y} = \mathbf{b},\]

然后对于\(\mathbf{x}\)

\[L.H \mathbf{x} = \mathbf{y}.\]

例子

>>> A = np.array([[1,-2j],[2j,5]])
>>> A
array([[ 1.+0.j, -0.-2.j],
       [ 0.+2.j,  5.+0.j]])
>>> L = np.linalg.cholesky(A)
>>> L
array([[1.+0.j, 0.+0.j],
       [0.+2.j, 1.+0.j]])
>>> np.dot(L, L.T.conj()) # verify that L * L.H = A
array([[1.+0.j, 0.-2.j],
       [0.+2.j, 5.+0.j]])
>>> A = [[1,-2j],[2j,5]] # what happens if A is only array_like?
>>> np.linalg.cholesky(A) # an ndarray object is returned
array([[1.+0.j, 0.+0.j],
       [0.+2.j, 1.+0.j]])
>>> # But a matrix object is returned if A is a matrix object
>>> np.linalg.cholesky(np.matrix(A))
matrix([[ 1.+0.j,  0.+0.j],
        [ 0.+2.j,  1.+0.j]])