gpt4 book ai didi

python - 获取 np.linalg.svd 的奇异值作为矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:18 34 4
gpt4 key购买 nike

给定一个 5x4 矩阵 A =

enter image description here

一段构造矩阵的python代码

A = np.array([[1, 0, 0, 0],
[0, 0, 0, 4],
[0, 3, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0]])

wolframalpha给出 svd 结果

enter image description here

具有奇异值 Σ 的 Vector(s) 是这种形式

enter image description here

np.linalg.svd 输出中的等效数量(NumPy 称之为 s)是这种形式

[ 4.          3.          2.23606798 -0.        ]

有没有办法让 numpy.linalg.svd 的输出数量显示为 wolframalpha?

最佳答案

您可以使用 diag 完成大部分工作:

>>> u, s, vh = np.linalg.svd(a)
>>> np.diag(s)
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ]])

请注意,wolfram alpha 提供了一个额外的行。获得它稍微复杂一些:

>>> sigma = np.zeros(A.shape, s.dtype)
>>> np.fill_diagonal(sigma, s)
>>> sigma
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ],
[ 0. , 0. , 0. , 0. ]])

根据您的目标,从 U 中删除一列可能比向 sigma 添加一行零更好。这看起来像:

>>> u, s, vh = np.linalg.svd(a, full_matrices=False)

关于python - 获取 np.linalg.svd 的奇异值作为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56728152/

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