Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速R中的嵌套循环以创建邻接矩阵_R_Parallel Processing_Adjacency Matrix - Fatal编程技术网

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

加速R中的嵌套循环以创建邻接矩阵,r,parallel-processing,adjacency-matrix,R,Parallel Processing,Adjacency Matrix,我需要一些帮助来并行化或加速以下嵌套循环: 有一个顶点列表(由一个id号标识),每个id都有一个与其关联的数字字符串(字符串长度有限,通常为60-200) id是一个约10000个不同id的列表 seq是(不同长度)序列的列表,每个序列都与唯一的id关联 我想在顶点I和顶点j相连的这些顶点上构建图的邻接矩阵,如果它们的序列具有公共元素。以下是我试图改进的代码: id_matrix<-matrix(nrow=length(id),ncol=length(id)) for (i in 1:(l

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

  • 有一个顶点列表(由一个id号标识),每个id都有一个与其关联的数字字符串(字符串长度有限,通常为60-200)
  • id
    是一个约10000个不同id的列表

    seq
    是(不同长度)序列的列表,每个序列都与唯一的id关联

  • 我想在顶点
    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])
       }
    }
    
    id\u矩阵在我的电脑上

    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]]))
        }
    }
    

    id\u矩阵查看包igraph。我同意
    igraph
    (或者可能
    Rcpp
    )可能是一条出路。出于兴趣,基本R解决方案可能看起来像这样:
    library(parallel);v是否已初始化边列表?一个10.000 x 10.000的循环应该在合理的时间内完成。在使用不同的选项后,看起来最快的速度增益(没有任何奇特的并行化)是序列的矢量化:看起来最快的速度增益(没有任何并行化)是矢量化:seq