Получение исходных имен узлов в Networkit
Я не уверен, что понимаю, как 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()
очень просто.
А что, если я захочу что-нибудь сделать с этими расстояниями? Например, что, если я хочу нанести их на график против, я не знаю, весов на путях или любой другой меры, которая требует извлечения исходных идентификаторов узлов?
В getDistances()
функция возвращает список списков, по одному для каждого узла с указанием расстояния до каждого другого узла, но я не знаю, как Networkit сопоставляет имена узлов с последовательностью целых чисел, которые он использует в качестве идентификаторов узлов, и, следовательно, в порядке следования для вычисления расстояний и сохранения их в выходных данных.
1 ответ
При создании нового графа из 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']]