在R中有效地加载稀疏矩阵

在R中有效地加载稀疏矩阵,r,sparse-matrix,R,Sparse Matrix,在R中,我无法有效地将数据加载到稀疏矩阵格式 以下是我当前策略的一个不完整示例: library(Matrix) a1=Matrix(0,5000,100000,sparse=T) for(i in 1:5000) a1[i,idxOfCols]=x 其中x通常约为20。这样做效率不高,最终会变慢为爬行。我知道有更好的方法,但不知道怎么做。建议?您可以一次填写所有矩阵: library(Matrix) n <- 5000 m <- 1e5 k <- 20 idxOfCol

在R中,我无法有效地将数据加载到稀疏矩阵格式

以下是我当前策略的一个不完整示例:

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

其中x通常约为20。这样做效率不高,最终会变慢为爬行。我知道有更好的方法,但不知道怎么做。建议?

您可以一次填写所有矩阵:

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

您可以一次填充所有矩阵:

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

您不需要使用for循环。Yu可以使用标准矩阵索引和两列矩阵:

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

您不需要使用for循环。Yu可以使用标准矩阵索引和两列矩阵:

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

这是一个好问题。我也有类似的问题。这是个好问题。我也有类似的问题。