我需要一些帮助来并行化或加速以下嵌套循环:
id
是一个大约的列表。10,000个不同ids
seq
是(不同长度)序列的列表,每个序列都与唯一的id相关联。
i
和顶点j
的序列有公共元素,则建立它们的邻接矩阵。下面是我正在努力改进的代码:
id_矩阵<-矩阵(nrow=length(Id),ncol=length(id))用于(i in 1:(length(id)){ for (j in 1:(length(Id){ edgelisti,j=length(intersect(seqi,seqj) }(对于不重叠的id序列,这将产生0,并且在有重叠的情况下产生一个有限的数目,这可以作为边的权重,并进行归一化)。
我尝试过foreach
、dopar
等选项,但我没有成功。使用length(id)=100
运行需要超过2分钟!一个完整的运行将需要至少一个月!我正在使用R Studio 0.98.507版本的Windows。
任何帮助都是非常感谢的,特别是在R中并行处理这两个嵌套循环方面。
注:这是一个稀疏矩阵:大约1%的所有可能的10^8边发生。
谢谢你的帮助!
发布于 2014-11-05 00:31:03
在我的电脑上
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时,只需不到半小时。
https://stackoverflow.com/questions/26751604
复制相似问题