numpy SVD 给出错误的值?

numpy SVD giving wrong values?

我正在尝试习惯使用 numpy 进行奇异值分解。我决定根据示例在矩阵上执行 SVD 以了解其工作原理。 I am following this pdf,其中 A = [[3, 2, 2], [2, 3, -2]]。但是,当我 运行 svd 时,我得到的矩阵 U 和 V 与 pdf 中提供的不同。它是相同的矩阵,只是符号被翻转了。现在,由于矩阵都是线性运算符,并且两者的符号都已翻转,从技术上讲它仍然是正确的,因此翻转被抵消了。但是为什么会这样呢?

请记住,UV 特征向量 。缩放一个特征向量仍然是一个特征向量,但只要你得到你在 PDF 中得到的解的一些线性倍数,它是完全可以接受的。如果 特征值 相同,您就知道实现是正确的。从您的 post 判断,因为您没有对特征值发表评论,我假设它们是正确的。特征值需要相同,但特征向量可以不同

在您的例子中,缩放是由 -1 完成的,它们仍然是相同特征值的有效特征向量。至于特征向量符号不同的原因,很可能是SVD的计算方式。找到实际的左特征向量和右特征向量在计算上是禁止的,因此完成了一些提示和技巧以获得相同的解决方案,这可能意味着特征向量的规模与您预期的不同。

我最后想向您指出这个交叉验证 post,它讨论了计算 SVD 的不同算法。 numpy.svd 检查输入矩阵的属性并选择合适的正确算法。

https://stats.stackexchange.com/questions/66034/what-are-efficient-algorithms-to-compute-singular-value-decomposition-svd