Python numpy.linalg.svd不按降序返回Sigma

Python numpy.linalg.svd不按降序返回Sigma,python,sorting,numpy,svd,Python,Sorting,Numpy,Svd,我目前正在使用numpy.linalg的奇异值分解函数计算一个大矩阵(确切地说是一幅图像)上的奇异值分解。我发现的文档和示例似乎都表明返回的Sigma值是按降序排列的(这意味着U和V^T的顺序是正确的) 然而,在我的测试中,西格玛值看起来是无序的。所以我的问题是,是否出于某种原因,我的linalg出现了问题(我知道这很不可能),或者它只是返回无序的sigma 接下来的问题是对西格玛进行排序的最佳方法,以便U和V^T中的顺序也反映了变化 由于linalg.svd只是LAPACKdgesdd的一个接

我目前正在使用numpy.linalg的奇异值分解函数计算一个大矩阵(确切地说是一幅图像)上的奇异值分解。我发现的文档和示例似乎都表明返回的Sigma值是按降序排列的(这意味着U和V^T的顺序是正确的)

然而,在我的测试中,西格玛值看起来是无序的。所以我的问题是,是否出于某种原因,我的linalg出现了问题(我知道这很不可能),或者它只是返回无序的sigma


接下来的问题是对西格玛进行排序的最佳方法,以便U和V^T中的顺序也反映了变化

由于
linalg.svd
只是LAPACK
dgesdd
的一个接口,因此应订购奇异值

>>> 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
如果得到无序的结果,请检查结果是否正确,如上面的示例所示。如果没有,你可能会有一个或(不太可能)一个numpy错误