Я пытаюсь вычислить m
первые собственные векторы большой разреженной матрицы в R. Использование eigen()
не является реалистичным, потому что большие средства N> 10 здесь.вычислительные собственные векторы разреженной матрицы в R
До сих пор я выяснил, что я должен использовать ARPACK из пакета igraph
, который может иметь дело с разреженными матрицами. Однако я не могу заставить его работать на очень простые (3х3) матрицах:
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
Я не понимаю эту ошибку, так как КУР (3) больше, чем Нев (2) здесь и равна N (3).
Я делаю какую-то глупую ошибку или есть лучший способ вычислить собственные векторы разреженной матрицы в R?
Update
Эта ошибка, по-видимому из-за ошибки в arpack()
функции с прописной/нижний регистр NCV и NEV.
Любые предложения по устранению ошибки (я попытался взглянуть на код пакета, но мне слишком сложно понять) или вычислить собственные векторы по-другому.
Возможно, это ошибка в функции 'arpack()'. –
Если не ошибка в самой функции, по крайней мере, документация должна быть обновлена, чтобы отразить этот факт, так как nev и ncv всегда имеют строчные буквы. – Calimo
К сожалению, это неправда, я имею в виду строчную или прописную вещь. Это вы даете им в верхнем регистре, затем их просто игнорируют, а значение nev равно 1, а ncv равно 3. –