填充稀疏矩阵时避免循环

时间:2017-11-27 17:27:59

标签: r sparse-matrix adjacency-matrix

我正在为我的硕士论文处理一个非常大的稀疏矩阵(1.000.000 * 1.000.000)。我使用R,更准确地说是' Matrix'专用于此问题的包。

基本上,我的问题是: 是否有现有的技术来填充稀疏矩阵而不循环遍历整个预先存在的数据帧我构建了稀疏矩阵?有没有更有效的方法来提取我的稀疏矩阵不会取0值的索引?

我不是第一个提出这个问题的人,但是大多数线程都关注Matlab或Python,我没有找到明确的答案。

让我们举一个例子来阐明这个问题。

假设我有这种形式的数据框Df:

list1 <- list("a","b","c")
list2 <- list("b,c","c", NA)
Df <- data.frame(cbind(list1, list2))
Df
  list1 list2
1     a   b,c
2     b     c
3     c    NA

我想构建一个稀疏矩阵S,如果Df [j,1]出现在Df [i,2]中,则指定S [i,j] = 1。因此,矩阵S将具有以下形式:

S=matrix(c(0,0,0,1,0,0,1,1,0), nrow=3)
S
     [,1] [,2] [,3]
[1,]    0    1    1
[2,]    0    0    1
[3,]    0    0    0

是否可以填写此矩阵而无需编写扫描Df的每一行和每列的循环?

事实上,目前我的代码看起来像这样:

row_vector <- vector()
col_vector <- vector()
val_vector <- vector()

count = 0

for (i in 1:3){
  for (j in 1:3){
    if (grepl(Df[i,1], Df[j,2], fixed=TRUE)==TRUE){
      count=count+1
      col_vector[count]=i
      row_vector[count]=j
      val_vector[count]=1
    }
  }
}

当我有一个小矩阵时,这很好,但是对于大矩阵可能会非常乏味。

我希望我足够清楚。我将不胜感激任何帮助或建议。

此致 杰曼

0 个答案:

没有答案