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

标签 python svd diagonal

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

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

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

对于上下文:出乎意料的原因是奇异值分解应该导致三个矩阵的乘积。中间矩阵(在这种情况下是一维数组)应该是一个对角矩阵,以降序保存非负奇异值。

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

谢谢!

最佳答案

这在 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)

关于python - 奇异值分解 (SVD) 输出一维奇异值数组,而不是二维对角矩阵 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61144301/

相关文章:

python - GDAL 重投影错误 : in method 'Geometry_Transform' , 类型 'OSRCoordinateTransformationShadow *' 的参数 2

c++ - OpenCV SVD 返回与 MATLAB 不同的结果

python - numpy.linalg.svd 不按降序返回西格玛

opencv - OpenCV 的增量奇异值分解

android - 如何处理android中的对角线手势?

optimization - 提取并设置 numpy 数组的粗对角线

python - 对 CSV 文件中的每四个元素求平均值

Python Gmail API 'not JSON serializable'

使两条对角线都通过矩阵条目 (i,j) 的 Pythonic 方法

python - 如何清理 Python 和 Flask 中用户提供的路径?