2

我不确定我是否了解 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()函数返回一个列表列表,每个节点都有一个与其他节点的距离,但我不知道 Networkit 如何将节点的名称映射到它用作节点标识符的整数序列,因此它遵循的顺序计算距离并将它们存储在输出中。

4

1 回答 1

5

当从networkx创建一个新图时,NetworKit 创建一个字典,将每个节点 id 映射nxG到一个从 0 到 n - 1 in 的唯一整数G(其中 n 是节点数)。不幸的是,这个映射不是由返回的,所以你应该自己创建它。nx2nk

让我们假设您想获得从节点1到节点的距离2,其中12是节点 ID 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']]
于 2020-02-19T12:16:11.977 回答