2012-03-10 4 views
2

にスパース行列をロード:効率的に私の現在の戦略の(不完全な)例である。ここで<p> Iを効率的に問題を抱えていR.</p>にスパース行列形式にデータをロード R

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

xは通常約20の長さです。これは効率的ではなく、最終的にはクロールに時間がかかります。私は良い方法があることを知っていますが、どのように確かではありませんでした。提案?

+0

これは良い質問です。私にも同様の問題があります。 – suncoolsu

答えて

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ループを使用する必要はありません。 Yuは、2列の行列を持つ標準行列インデックスを使うことができます:

a1[ cbind(i,idxOfCols) ] <- x 
関連する問題