加速R中的嵌套循环以创建邻接矩阵

时间:2014-11-05 07:15:32

标签: r parallel-processing adjacency-matrix

我需要一些帮助来并行化或加速以下嵌套循环:

  1. 有一个顶点列表(由id号标识),每个id都有一串与之关联的数字(字符串长度有限,通常为60-200)。
  2. id是约的列表。 10,000个不同的ID

    seq是(不同长度)序列的列表,每个序列与唯一ID

    相关联
    1. 我想在顶点i和顶点j连接的顶点上建立图形的邻接矩阵,如果它们的序列具有共同的元素。以下是我要改进的代码:

      id_matrix<-matrix(nrow=length(id),ncol=length(id))
      for (i in 1:(length(id)){
         for (j in 1:(length(id)){
            edgelist[i,j]=length(intersect(seq[i],seq[j])
         }
      }
      
    2. (对于非重叠的id序列,这将产生0,并且每当存在重叠时产生有限数,可以用作边的权重,并进行归一化)。

      我尝试了foreachdopar等选项,但我没有成功。使用length(id)=100运行需要2分钟以上!全程运行至少需要一个月!我正在使用R Studio版本0.98.507的Windows PC上工作。

      非常感谢任何帮助,尤其是在R中并行化这两个嵌套循环时。

      注意:这是一个稀疏矩阵:所有可能的10 ^ 8个边缘中约有1%出现。

      感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在我的电脑上

id_matrix <- matrix(0, nrow = length(id), ncol = length(id))
for (i in 1:length(id)) {
    for (j in i:length(id)) {
        id_matrix[cbind(c(i,j),c(j, i))] <- length(intersect(seq[[i]],seq[[j]]))
    }
}
length(id)为10000时,

不到半小时。