gpt4 book ai didi

r - 计算 R 中稀疏矩阵的特征向量

转载 作者:行者123 更新时间:2023-12-05 00:03:35 26 4
gpt4 key购买 nike

我正在尝试计算 m R 中大型稀疏矩阵的第一特征向量。使用 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() 的帮助示例中给出的代码提取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。

欢迎任何解决该错误的建议(我试图查看包代码,但它对我来说太复杂了无法理解)或以其他方式计算特征向量。

最佳答案

这里实际上没有错误,但是你把 sym=TRUE 弄错了。进入 ARPACK 选项列表,但 symarpack() 的一个参数功能。 IE。正确的调用是:

ev <- arpack(func, options=list(n=3, nev=2, ncv=3, which="LM", maxiter=200), 
sym=TRUE, complex = FALSE)
ev$values
# [1] 3 2
ev$vectors
# [,1] [,2]
# [1,] -6.000000e-01 -8.000000e-01
# [2,] 8.000000e-01 -6.000000e-01
# [3,] 2.220446e-16 -9.714451e-17

如果您对细节感兴趣,会发生什么情况,而不是对称,而是调用一般的非对称特征求解器,为此还需要 NCV-NEV >= 2。来自 ARPACK 源 (dnaupd.f):
...
c NOTE: 2 <= NCV-NEV in order that complex conjugate pairs of Ritz
c values are kept together. (See remark 4 below)
...

还有一些评论,仅与您的问题松散相关。 arpack()可能会很慢。它的问题在于您需要在每次迭代中从 C 代码回调到 R。请参阅此线程: http://lists.gnu.org/archive/html/igraph-help/2012-02/msg00029.html
底线是 arpack()仅当您的矩阵向量乘积回调速度很快并且您不需要多次迭代时才有帮助,后者与矩阵的特征结构有关。

我在 igraph 问题跟踪器中创建了一个问题,以查看是否可以选择使用 C 回调,使用 Rcpp,而不是 R 回调: https://github.com/igraph/igraph/issues/491
有兴趣的可以关注这个issue。

关于r - 计算 R 中稀疏矩阵的特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16966748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com