【发布时间】:2018-12-20 03:24:47
【问题描述】:
我正在尝试使用奇异值分解 (SVD)。我发现这个YouTube Lecture 包含一个示例。但是,当我在 numpy 中尝试这个示例时,我得到了“某种”不同的结果。在这个例子中,输入矩阵是
A = [ [1,1,1,0,0], [3,3,3,0,0], [4,4,4,0,0], [5,5,5,0,0], [0,2,0,4,4], [0,0,0,5,5], [0,1,0,2,2] ]
A = np.asarray(A)
print(A)
[[1 1 1 0 0]
[3 3 3 0 0]
[4 4 4 0 0]
[5 5 5 0 0]
[0 2 0 4 4]
[0 0 0 5 5]
[0 1 0 2 2]]
这个矩阵的秩是 3 (np.linalg.matrix_rank(A))。讲座指出奇异值的数量是矩阵的秩,在示例中,Sigma 矩阵 S 的大小确实为 3=3。但是,当我执行时
U, S, V = np.linalg.svd(A)
矩阵 S 包含 5 个值。另一方面,前 3 个值与示例中的值匹配,其他 2 个基本上为 0。由于 SVD 背后的数值算法和实数的有限表示,我可以假设得到比排名更多的奇异值吗在计算机上 - 或类似的东西?
【问题讨论】:
-
这看起来像是数字不准确,因为
np.allclose(A, np.dot(U * S, V))仍然返回True。
标签: python numpy linear-algebra svd