0
我需要一些幫助並列化或加快下面的嵌套循環:加快嵌套循環創建一個鄰接矩陣
- 具有頂點(通過ID號識別)的列表,每個ID有一串與其相關的數字(字符串有限長度,通常爲60-200)。
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%。
謝謝你的幫助!
查找到包的igraph。 – Roland 2014-11-05 08:10:43
我同意'igraph'(或者''Rcpp')可能是要走的路。感興趣的是,基本的R解決方案可能看起來像這樣:'library(parallel); v < - setNames(replicate(10,sample(100,sample(5:10,1))),1:10); cl < - makeCluster(detectCores() - 1); clusterExport(cl,'v'); (x,y)長度(相交(x,y)))); STOPCLUSTER(CL)'。 – jbaums 2014-11-05 08:32:53
是'edgelist'初始化?一個10.000 x 10.000循環應該在合理的時間內可行。 – 2014-11-05 08:46:00