加速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
是一个约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