2012-03-10 94 views
2
我無法有效地將數據裝載到稀疏矩陣格式中R.

高效地裝載的稀疏矩陣中的R

這是我的當前策略的一個(不完全)例如:

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

在哪裏x通常在20左右。這不是有效的,最終會減緩爬行速度。我知道有一個更好的方法,但不知道如何。建議?

+0

這是一個很好的問題。我有類似的問題。 – suncoolsu 2012-03-10 22:54:18

回答

3

可以填充基質一下子:

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

你並不需要使用一個for循環。餘可以使用標準矩陣索引與兩列矩陣:

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