Эффективно загрузить разреженную матрицу в R - PullRequest
2 голосов
/ 11 марта 2012

У меня проблемы с загрузкой данных в формат с разреженной матрицей в R.

Вот (неполный) пример моей текущей стратегии:

library(Matrix)
a1=Matrix(0,5000,100000,sparse=T)
for(i in 1:5000)
  a1[i,idxOfCols]=x

Где х обычно около длины 20. Это неэффективно и в конечном итоге замедляется до ползания. Я знаю, что есть лучший способ, но не был уверен, как. Предложения?

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

Вы можете заполнить матрицу сразу:

library(Matrix)
n <- 5000
m <- 1e5
k <- 20
idxOfCols <- sample(1:m, k)
x <- rnorm(k)

a2 <- sparseMatrix(
  i=rep(1:n, each=k),
  j=rep(idxOfCols, n),
  x=rep(x, k),
  dims=c(n,m)
)

# Compare
a1 <- Matrix(0,5000,100000,sparse=T)
for(i in 1:n) {
  a1[i,idxOfCols] <- x
}
sum(a1 - a2) # 0
1 голос
/ 11 марта 2012

Вам не нужно использовать цикл for.Юй может просто использовать стандартную матричную индексацию с двумя столбцами матрицы:

 a1[ cbind(i,idxOfCols) ] <- x
...