【问题标题】:numpy SVD giving wrong values?numpy SVD 给出错误的值?
【发布时间】:2018-03-24 01:07:59
【问题描述】:

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

【问题讨论】:

标签: python numpy svd


【解决方案1】:

记住UV特征向量。缩放特征向量仍然是特征向量,但只要您获得 PDF 中解的线性倍数,它是完全可以接受的。如果 特征值 相同,您就知道实现是正确的。从您的帖子来看,因为您没有对特征值发表评论,我假设它们是正确的。特征值必须相同,但特征向量可以不同。

在您的情况下,缩放由-1 完成,它们仍然是相同特征值的有效特征向量。至于特征向量符号不同的原因很可能是SVD的计算方式。找到实际的左右特征向量在计算上是令人望而却步的,因此已经完成了一些提示和技巧来得出相同的解决方案,这可能意味着特征向量的规模与您的预期不同。

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

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

【讨论】:

    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2015-12-10
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多