我正在尝试计算m
R 中大型稀疏矩阵的第一个特征向量。使用eigen()
是不现实的,因为这里大意味着 N > 10 6。
到目前为止,我发现我应该使用igraph
包中的 ARPACK,它可以处理稀疏矩阵。但是我不能让它在一个非常简单的(3x3)矩阵上工作:
library(Matrix)
library(igraph)
TestDiag <- Diagonal(3, 3:1)
TestMatrix <- t(sparseMatrix(i = c(1, 1, 2, 2, 3), j = c(1, 2, 1, 2, 3), x = c(3/5, 4/5, -4/5, 3/5, 1)))
TestMultipliedMatrix <- t(TestMatrix) %*% TestDiag %*% TestMatrix
然后使用arpack()
函数帮助示例中给出的代码来提取 2 个第一个特征向量:
func <- function(x, extra=NULL) { as.vector(TestMultipliedMatrix %*% x) }
arpack(func, options=list(n = 3, nev = 2, ncv = 3, sym=TRUE, which="LM", maxiter=200), complex = FALSE)
我收到一条错误消息:
Error in arpack(func, options = list(n = 3, nev = 2, ncv = 3, sym = TRUE, :
At arpack.c:1156 : ARPACK error, NCV must be greater than NEV and less than or equal to N
我不明白这个错误,因为这里的 ncv (3) 大于 nev (2),并且等于 N (3)。
我犯了一些愚蠢的错误还是有更好的方法来计算 R 中稀疏矩阵的特征向量?
更新
此错误显然是由于arpack()
大写/小写 NCV 和 NEV 函数中的错误所致。
欢迎任何解决错误的建议(我试图查看包代码,但它太复杂了,我无法理解)或以其他方式计算特征向量。