在 Networkit 中检索原始节点名称

Retrieving original node names in 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()

简单易行。

现在,如果我想对这些距离做些什么怎么办?例如,如果我想根据(我不知道)路径上的权重或任何其他需要检索原始节点 ID 的度量来绘制它们怎么办?

getDistances() 函数 returns 一个列表列表,每个节点都有一个到其他节点的距离,但我不知道 Networkit 如何将节点的名称映射到序列它用作节点标识符的整数,因此是计算距离并将它们存储在输出中所遵循的顺序。

从 networkx 创建新图时,NetworKit 创建一个字典,将 nxG 中的每个节点 ID 映射到 G 中从 0 到 n - 1 的唯一整数(其中 n 是数字节点数)和 this instruction。 不幸的是,nx2nk 不返回此映射,因此您应该自己创建它。

假设您想要获取从节点 1 到节点 2 的距离,其中 12nxG 中的节点 ID :

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']]