如何识别 rows/columns 不会增加 R 中矩阵的等级?
How do I identify rows/columns that does not increase rank of matrix in R?
假设我有一个对称的半正定矩阵 A
,维度为 n x n。 A
的秩是 d < n,我想找到一组长度为 d
的索引,使得 A[indices, indices]
的秩为 d
。例如,如果
A <- structure(c(3, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(4L, 4L))
那么我想确定一组索引 c(1, 2, 3)
或 c(1, 2, 4)
。
我可以通过蛮力遍历行和列的所有组合来做到这一点,但我的猜测是存在更优雅和更有效的方法来做到这一点。
可以使用QR分解,qr
q <- qr(A)
q$pivot[seq(q$rank)]
# [1] 1 2 3
A[,q$pivot[seq(q$rank)]]
# [,1] [,2] [,3]
# [1,] 3 2 1
# [2,] 2 2 1
# [3,] 1 1 1
# [4,] 1 1 1
这些结果列应该是线性独立的。
假设我有一个对称的半正定矩阵 A
,维度为 n x n。 A
的秩是 d < n,我想找到一组长度为 d
的索引,使得 A[indices, indices]
的秩为 d
。例如,如果
A <- structure(c(3, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(4L, 4L))
那么我想确定一组索引 c(1, 2, 3)
或 c(1, 2, 4)
。
我可以通过蛮力遍历行和列的所有组合来做到这一点,但我的猜测是存在更优雅和更有效的方法来做到这一点。
可以使用QR分解,qr
q <- qr(A)
q$pivot[seq(q$rank)]
# [1] 1 2 3
A[,q$pivot[seq(q$rank)]]
# [,1] [,2] [,3]
# [1,] 3 2 1
# [2,] 2 2 1
# [3,] 1 1 1
# [4,] 1 1 1
这些结果列应该是线性独立的。