奇异值分解(SVD)输出一维奇异值数组,而不是二维对角矩阵[Python]

2024-09-14 23:07:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我发布了一个关于类似主题的问题,遇到了另一个更重要的问题

当我将奇异值分解应用于矩阵“a”(下面的代码)时,我得到的输出是预期的二维特征向量矩阵(“U”和“V”)和意外的一维奇异值数组“S”

U,S,V=np.linalg.svd(A)

上下文:其出人意料的原因是奇异值分解应导致三个矩阵的乘积。中间矩阵(在本例中为一维数组)应为对角矩阵,以数量级递减的方式保持非负奇异值

为什么Python将矩阵“转换”为数组?有办法绕过它吗

谢谢


Tags: 代码主题np方式原因矩阵数组乘积
2条回答

使用np.diag(https://docs.scipy.org/doc/numpy/reference/generated/numpy.diag.html

>>> np.diag([0, 4, 8])
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 8]])

这在docs中非常清楚,您将看到:

s : (…, K) array: Vector(s) with the singular values, within each vector sorted in descending order. The first a.ndim - 2 dimensions have the same size as those of the input a.

所以基本上S就是你提到的矩阵的对角线,也就是奇异值。可以使用以下方法从中构造对角矩阵:

np.diag(S)

相关问题 更多 >