使用 numpy 计算 svd 中的奇异值

singular values in svd calculation using numpy

我有一个问题要关注

A = array([
[1,2,3,4,5,6,7,8,9,10],
[11,12,13,14,15,16,17,18,19,20],
[21,22,23,24,25,26,27,28,29,30]])
print(A)
# Singular-value decomposition
U, s, VT = svd(A)

上面的“s”应该是形状(10,),因为我们有 10 个特征,但显示的不是(3,)。示例输出如下所示,我很困惑。请解释一下,为什么我们去 (3,)

(3, 10)
U shape (3, 3)
s shape (3,)
VT shape (10, 10)

让我们考虑另一个例子

A = array([[1, 2], [3, 4], [5, 6]])
print(A.shape)
# Singular-value decomposition
U, s, VT = svd(A)
Here “s” shape is shown as (2,)

这里输出如下图

(3, 2)
U shape  (3, 3)
s shape (2,)
VT shape  (2, 2)

我不明白为什么形状会有所不同。请解释

使用SVD,形状为(m x n)的矩阵A分解为

  • 形状为 (m x m)
  • 的酉矩阵 U
  • 形状为 (m x n)
  • 的矩形对角矩阵 Sigma
  • 一个酉矩阵 V,形状为 (n x n)

Sigma 包含其主对角线上的所有奇异值。由于形状为 (m x n) 的矩阵在其主对角线上仅包含 min(m, n) 个元素,因此只有 min(m, n) 奇异值。