我需要一些帮助来并行化或加速以下嵌套循环:
id
是约的列表。 10,000个不同的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序列,这将产生0,并且每当存在重叠时产生有限数,可以用作边的权重,并进行归一化)。
我尝试了foreach
,dopar
等选项,但我没有成功。使用length(id)=100
运行需要2分钟以上!全程运行至少需要一个月!我正在使用R Studio版本0.98.507的Windows PC上工作。
非常感谢任何帮助,尤其是在R中并行化这两个嵌套循环时。
注意:这是一个稀疏矩阵:所有可能的10 ^ 8个边缘中约有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时,不到半小时。