【发布时间】:2020-05-27 02:04:36
【问题描述】:
我生成了一个随机的 5*5 矩阵x,如下所示:
>>> x = np.random.randn(5,5)
并使用scipy.linalg.ldl 分解将其分解,如下所示:
>>> l, d, p = la.ldl(x)
使用 l、d 和 p 我想返回 x。我认为我可以做到以下几点:
>>> l[p,:] @ d @ l[p,:].transpose() - x
但这并没有像我预期的那样给我零。谁能解释我哪里出错了?
我的目标是获得下对角矩阵L 使得x = LDL^T 不需要行置换矩阵p,但我对 scipy 给出的输出感到非常困惑。
【问题讨论】:
-
正如其他人所指出的,您需要提供一个对称的正定矩阵。要创建一个示例,您只需要“平方”一个通用矩阵(可能在对角线上添加一些东西以确保特征值都是非零的)。例如。
X = <some matrix>; XX = transpose(X) . X; XX1 = XX + identity之类的东西(用虚构的符号。我不知道 Numpy/Scipy 中的这些操作是什么)然后你 XX1 是对称的和 p.d.,所以你可以继续。
标签: python numpy math scipy linear-algebra