【问题标题】:Singular value decomposition in R - limited number of singular values from svd()R 中的奇异值分解 - 来自 svd() 的奇异值数量有限
【发布时间】:2017-03-15 19:07:41
【问题描述】:

在 R 的 svd() 函数文档中,底部有一个示例。

hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
X <- hilbert(9)[, 1:6]

我想设置的不是默认输入值

  • nu = 行数
  • nv = 列数

所以我跑了

s = svd(X, nu = dim(X)[1], nv = dim(X)[2])

这里是“s”中矩阵的维度。

> str(s)
List of 3
 $ d: num [1:6] 1.67 2.77e-01 2.22e-02 1.08e-03 3.24e-05 ...
 $ u: num [1:9, 1:9] -0.724 -0.428 -0.312 -0.248 -0.206 ...
 $ v: num [1:6, 1:6] -0.736 -0.443 -0.327 -0.263 -0.22 ...

我希望 d 的长度为 9,但它的长度却是 6。为什么?

【问题讨论】:

  • 因为svd 只返回非零奇异值。如果您的矩阵最多为 n×m,则它可以具有 min(n,m) 个非零奇异值。
  • 感谢欧内斯特 A,您的明确回答!您应该将您的评论作为答案,并获得您应得的荣誉。

标签: r svd


【解决方案1】:

SVD 有两个版本。矩阵的简单 SVD 包括找到一些矩阵 UDV,使得 X = UDV',其中D是对角线,UV是正交的。 U 的列是 X 的列空间的正交基,而 V 的列是行空间的正交基X。如果 Xn × m 秩为 r,从线性代数我们知道 r em> 是线性独立的列数,与线性独立的行数相同。因此 U 必须是 n x rV m x r 。因此 D 是对角线 r x r

在另一个版本的SVD中,UV是用左零空间和X的零空间的正交基完成的> 分别。在这种情况下,UV 是方阵,n x nm x m,而 Dn x m 因此不再是对角线。非对角 D 矩阵中的额外条目为零。因为额外的奇异值没有什么意义(因为它们都为零),所以函数svd 不会返回这些值。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 2010-10-31
    • 2015-04-16
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2016-01-10
    • 2014-03-10
    相关资源
    最近更新 更多