Получение оригинальных имен узлов в Networkit - PullRequest
0 голосов
/ 18 февраля 2020

Я не уверен, что понимаю, как Networkit обрабатывает имена узлов.

Допустим, я прочитал большой график из списка ребер, используя другой модуль Python, например Networkx; затем я конвертирую его в сетевой график и выполняю некоторые операции, например, вычисление парных расстояний. Простой кусок кода для этого может быть:

import networkx as nx
import networkit as nk

nxG=nx.read_edgelist('test.edgelist',data=True)

G = nk.nxadapter.nx2nk(nxG, weightAttr='weight')

apsp = nk.distance.APSP(G)
apsp.run()
dist=apsp.getDistances()

easy-peasy.

Теперь, что если я захочу что-то сделать с этими расстояниями? Например, что если я хочу построить их в зависимости от, я не знаю, весов на путях или любых других мер, которые требуют извлечения исходных идентификаторов узлов?

Функция getDistances() возвращает список списков, по одному для каждого узла с расстоянием до каждого другого узла, но я не имею ни малейшего понятия о том, как Networkit отображает имена узлов в последовательность целых чисел, которые он использует в качестве идентификаторов узлов, таким образом, порядок, который он использовал для вычисления расстояния и хранить их на выходе.

1 Ответ

1 голос
/ 19 февраля 2020

При создании нового графа из networkx, NetworKit создает словарь, который сопоставляет каждый идентификатор узла в nxG уникальному целому числу от 0 до n - 1 в G (где n - количество узлов) с эта инструкция . К сожалению, это отображение не возвращается nx2nk, поэтому вы должны создать его самостоятельно.

Предположим, что вы хотите получить расстояние от узла 1 до узла 2, где 1 и 2 - это идентификаторы узлов в nxG:

import networkx as nx
import networkit as nk

nxG=nx.read_edgelist('test.edgelist',data=True)

G = nk.nxadapter.nx2nk(nxG, weightAttr='weight')

# Get mapping from node ids in nxG to node ids in G
idmap = dict((id, u) for (id, u) in zip(nxG.nodes(), range(nxG.number_of_nodes())))

apsp = nk.distance.APSP(G)
apsp.run()
dist=apsp.getDistances()

# Get distance from node `1` to node `2`
dist_from_1_to_2 = dist[idmap['1']][idmap['2']]
...