gpt4 book ai didi

python - numpy.linalg.svd 不按降序返回西格玛

转载 作者:行者123 更新时间:2023-12-01 05:56:43 24 4
gpt4 key购买 nike

我目前正在使用 numpy.linalg 的 svd 函数在大矩阵(准确地说是图像)上计算 SVD。我发现的文档和示例似乎都表明返回的 Sigma 值按降序排序(暗示 U 和 V^T 的正确排序)。

但是,在我的测试中,西格玛值似乎是无序的。所以我的问题是,是否由于某种原因我的 linalg 出了问题(我知道极不可能),或者它只是将西格玛返回为无序?

后续问题是对 sigma 进行排序的最佳方法,以便 U 和 V^T 中的顺序也反射(reflect)变化。

最佳答案

由于 linalg.svd 只是 LAPACK dgesdd 的接口(interface),因此应该对奇异值进行排序。

>>> import numpy as np
>>> A = np.random.randn(2400,3600)
>>> U, s, V = np.linalg.svd(A, full_matrices=False)
>>> np.allclose(A, np.dot(U*s, V))
True
>>> (s[:-1] >= s[1:]).all()
True

如果您得到无序结果,请检查结果是否正确,如上例所示。如果没有,您可能有 lapack bug或(不太可能)是一个 NumPy 的错误。

关于python - numpy.linalg.svd 不按降序返回西格玛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com