我试图习惯用numpy做奇异值分解。我决定从一个例子中对矩阵进行SVD,以了解它是如何工作的。 I am following this pdf,其中A = [[3,2,2],[2,3,-2]]。然而,当我运行svd时,我得到了不同的矩阵U和V然后在pdf中提供了什么。它是相同的矩阵,除了标志已被翻转。现在,由于矩阵都是线性算子并且标志都已翻转,因此在技术上仍然是正确的,翻转取消了。但为什么会这样呢?
答案 0 :(得分:2)
请注意,U
和V
是特征向量。缩放特征向量仍然是一个特征向量,但只要您获得PDF中获得的解决方案的线性倍数,就完全可以接受。如果特征值相同,您知道实现是正确的。从您的帖子判断,因为您没有评论特征值,我假设它们是正确的。特征值必须相同,但特征向量可以不同。
在您的情况下,缩放由-1
完成,它们仍然是相同特征值的有效特征向量。至于特征向量符号不同的原因很可能是计算SVD的方式。找到实际的左右特征向量在计算上是禁止的,因此完成了一些提示和技巧以达到相同的解决方案,这可能意味着特征向量的比例与您预期的不同。
我最后想指出这篇关于计算SVD的不同算法的Cross Validated帖子。 numpy.svd
检查输入矩阵的属性,并选择合适的算法。