【问题标题】:Retrieving original node names in Networkit在 Networkit 中检索原始节点名称
【发布时间】:2020-02-18 16:12:13
【问题描述】:

我不确定我是否了解 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 如何将节点的名称映射到它用作节点标识符的整数序列,因此它遵循计算距离并将它们存储在输出中的顺序。

【问题讨论】:

    标签: python networkx networkit


    【解决方案1】:

    从networkx创建新图时,NetworKit创建一个字典,将nxG中的每个节点id映射到G中从0到n-1的唯一整数(其中n是节点数)@987654321 @。 不幸的是,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']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多