【发布时间】:2019-09-10 15:48:14
【问题描述】:
我想计算矩阵的奇异值分解,奇异值的顺序很重要。默认情况下,numpy.linalg.svd(和scipy.linalg.svd)似乎对奇异值进行排序,这使我无法分辨出哪个列对应于每个奇异值。
例子:
import numpy as np
X = np.array([[-74, 80, 18, -56, -112],
[14, -69, 21, 52, 104],
[66, -72, -5, 764, 1528],
[-12, 66, -30, 4096, 8192],
[3, 8, -7, -13276, -26552],
[4, -12, 4, 8421, 16842]])
U, D, V = np.linalg.svd(X)
print(D)
返回:
array([3.63684045e+04, 1.70701331e+02, 6.05331879e+01, 7.60190176e+00,
1.17158094e-12])
当我需要时:
array([1.70701331e+02, 6.05331879e+01, 7.60190176e+00, 3.63684045e+04,
1.17158094e-12])
有没有办法获得未排序的奇异值 (D)?关系 X = UDV^T 也必须保留。
编辑:这里需要一些上下文来澄清我的误解。我试图在this paper 中重现第 2.3 节,方差分解方法。
【问题讨论】:
-
当您说“这让我无法分辨哪一列对应于每个奇异值”时,您在说什么列?酉基 U 和共轭转置 V 的那些?
-
我已经删除了交叉发布,感谢您提出建设性问题和反馈。
标签: python numpy scipy linear-algebra svd