我正在尝试使用 计算此矩阵的奇异值分解numpy.linalg.svd。
然而,从 SVD 重构矩阵的重构效果很差——特别是,重构中的第一行和第二列远小于原始矩阵。
u, w, vt = np.linalg.svd(M)
np.allclose(M, np.dot(u, np.dot(np.diag(w), vt)))
>> False
矩阵是奇异的(w[-1]为零),并且最大的奇异值远大于其他非零值(3e+24vs7e-2为下一个最大值)。
-
我是否应该期望从 SVD 的重建对于条件如此恶劣的矩阵来说很差?他们还有其他更稳定的方法可以计算 SVD 吗?
-
我计算 SVD 的原因是对M我计算的伪逆的诊断numpy.linalg.pinv,它应该返回 Moore-Penrose 伪逆。据我了解,这个特定的伪逆应该是对称的,因为M它是对称的,但事实并非如此。我的假设是这是因为numpy.linalg.pinv计算的 SVD 存在问题。