R, igraph, Big Data: вычисление кратчайшего расстояния от вершины до вершины с очень большой сетью - PullRequest
0 голосов
/ 16 мая 2018

У меня очень большая сеть, основанная на уникальных вершинах 100K и ребрах 500M (примечание: все ребра имеют расстояние 1 (двоичное) и ненаправленные).

Мне нужно создать матрицу 100K на 100K самого короткогорасстояния между каждой парой вершин.

Я использую igraph и команду distances(), которая создает именно то, что я хочу, с чем-то вроде этого:

distance_mat <- distances(network, v=V(network), to=V(network), weights=NA)

Однако, это становится оченьмедленная работа с сетью такого масштаба - по текущим оценкам мой код требует> 10 дней для завершения на i7 Mac с частотой 2,5 ГГц и 16 ГБ ОЗУ.

Кто-нибудь оптимизировал процедуру, чтобы сделать что-то подобное с таким большимсеть или есть идеи, как это ускорить?

Вот пример кода для построения большой (но не полноразмерной) сети, на котором можно попрактиковаться, если это поможет:

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()
...