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

enr*_*icw 6 python matrix svd diagonal

我在类似主题上发布了一个问题,并遇到了另一个更重要的问题。

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

U,S,V=np.linalg.svd(A)
Run Code Online (Sandbox Code Playgroud)

对于上下文:它出乎意料的原因是奇异值分解应该产生三个矩阵的乘积。中间矩阵(在本例中为一维数组)应该是对角矩阵,以降序保存非负奇异值。

为什么 Python 将矩阵“转换”为数组?有办法解决吗?

谢谢!

yat*_*atu 4

这在文档中说得很清楚,你会看到:

\n\n
\n

s : (\xe2\x80\xa6, K) array:具有奇异值的向量,每个向量内按降序排序。第一个 a.ndim - 2 维度与输入 a 的大小相同。

\n
\n\n

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

\n\n
np.diag(S)\n
Run Code Online (Sandbox Code Playgroud)\n