我试图在R中计算一个大稀疏矩阵的前m个特征向量。使用eigen()
是不切实际的,因为这里大约N > 106。
到目前为止,我已经确定应该使用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()
函数示例中给出的代码提取前两个特征向量:
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的大小写问题导致的。
欢迎提出任何解决此错误(我尝试查看软件包代码,但它对我来说过于复杂)或以其他方式计算特征向量的建议。
arpack()
函数中的一个错误。 - Gabor Csardi