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 将矩阵“转换”为数组?有办法解决吗?
谢谢!
这在文档中说得很清楚,你会看到:
\n\n\n\n\ns : (\xe2\x80\xa6, K) array:具有奇异值的向量,每个向量内按降序排序。第一个 a.ndim - 2 维度与输入 a 的大小相同。
\n
所以基本上S只是你提到的矩阵的对角线,即奇异值。您可以使用以下方法构造对角矩阵:
np.diag(S)\nRun Code Online (Sandbox Code Playgroud)\n