2012-03-10 92 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