我有一个非常大的网络,基于100K唯一顶点和500M边缘(注意:边缘都是距离1(二进制)和无向)。
我需要创建每个顶点对之间最短距离的100K×100K矩阵。
我正在使用igraph
和distances()
命令,它可以创建我想要的东西:
distance_mat <- distances(network, v=V(network), to=V(network), weights=NA)
然而,对于如此规模的网络而言,它变得非常缓慢 - 目前的估计需要我的代码&gt;在具有16GB RAM的2.5 GHz i7 Mac上完成10天。
有没有人优化过一个例行程序,用如此庞大的网络做这样的事情,或者有关于如何加快速度的想法?
以下是一些示例代码,用于构建一个大型(但不是完整大小)网络,以便在有帮助时进行练习:
require(igraph)
n_id <- 100000
n_connect <- 100000000
id1 <- sample(1:n_id,n_connect,replace=T)
id2 <- sample(1:n_id,n_connect,replace=T)
nbr <- rep(1,n_connect)
idall <- unique(c(id1,id2))
df <- as.data.frame(cbind(id1,id2,nbr))
network <- graph_from_data_frame(d=df, vertices=idall, directed=F)
Sys.time()
dist_df <- distances(network, v=V(network)[1:1000], to=V(network)[1:1000], weights=NA)
Sys.time()