Numpy svd没有';t返回正确的尺寸

Numpy svd没有';t返回正确的尺寸,numpy,linear-algebra,Numpy,Linear Algebra,我有一个维数为(22,2)的矩阵,我想用奇异值分解它。但是numpy中的SVD没有返回正确的维度。我希望像(22,22)、(22,2) 返回的尺寸是正确的。uu和vvh矩阵始终是平方矩阵,而根据软件的不同,s可以是仅具有奇异值的数组(如numpy)或具有原始矩阵尺寸的对角矩阵(如MATLAB) uu矩阵的维数是原始矩阵的行数,vvh矩阵的维数是原始矩阵的列数。这永远不会改变,否则您将计算其他内容而不是SVD 要从numpy中的分解重构原始矩阵,我们需要将s转换为具有适当维数的矩阵。对于方阵很容易

我有一个维数为(22,2)的矩阵,我想用奇异值分解它。但是numpy中的SVD没有返回正确的维度。我希望像
(22,22)、(22,2)


返回的尺寸是正确的。
uu
vvh
矩阵始终是平方矩阵,而根据软件的不同,
s
可以是仅具有奇异值的数组(如numpy)或具有原始矩阵尺寸的对角矩阵(如MATLAB)

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

要从numpy中的分解重构原始矩阵,我们需要将
s
转换为具有适当维数的矩阵。对于方阵很容易,只要
np.diag(s)
就足够了。因为您的原始矩阵不是正方形的,而且它的行数多于列数,所以我们可以使用

S=np.vstack([np.diag,np.zero((20,2)))
然后我们得到一个
S
矩阵,它是一个奇异值和零矩阵串联的对角矩阵。最后,
uu
是22x22,
S
22x2
vvh
2x2
。乘以
uu@S@vvh
将返回原始矩阵