我无法在R中有效地将数据加载到稀疏矩阵格式中。
以下是我当前战略的一个(不完整)示例:
library(Matrix)
a1=Matrix(0,5000,100000,sparse=T)
for(i in 1:5000)
a1[i,idxOfCols]=x
其中x通常在长度20附近。这不是有效的,最终会慢慢爬行。我知道有更好的方法但不确定如何。建议?
答案 0 :(得分: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 :(得分:1)
您不需要使用for循环。您可以使用带有两列矩阵的标准矩阵索引:
a1[ cbind(i,idxOfCols) ] <- x