svd return 尺寸不正确

svd doesn't return correct dimension

我有一个维度为 (22,2) 的矩阵,我想使用 SVD 分解它。 numpy 中的 SVD 没有 return 正确的尺寸 though.I 期望尺寸像 (22,22), (22),(22,2)?

返回的尺寸是正确的。 uuvvh 矩阵始终是 方阵 ,而根据软件 s 可以是仅包含奇异值的数组(如numpy) 或具有原始矩阵维度的对角矩阵(例如在 MATLAB 中)。

uu矩阵的维数是原矩阵的行数,而vvh矩阵的维数是原矩阵的列数。这永远不会改变,否则您将计算其他东西而不是 SVD。

为了从 numpy 中的分解重建原始矩阵,我们需要将 s 变成具有适当维度的矩阵。对于方阵来说很简单,np.diag(s) 就足够了。由于您的原始矩阵不是正方形,并且行数多于列数,因此我们可以使用

S = np.vstack([np.diag(s), np.zeros((20, 2))])

然后我们得到一个 S 矩阵,它是一个对角矩阵,奇异值与零矩阵连接。最后,uu是22x22,S22x2vvh2x2。乘以 uu @ S @ vvh 将返回原始矩阵。