使用Networkx计算单个节点中心性的最佳方法是什么
解决方案
NetworkX的介数中心性计算函数内置了指定计算节点子集的参数,无需全量计算所有节点的指标,针对你给出的示例场景,有两种实现方式:
- 小规模图直接取值
图节点数量不多的情况下,全量计算后直接提取目标节点的结果即可,代码如下:
import networkx as nx # 构建示例图 G = nx.Graph() G.add_nodes_from(['A', 'B', 'C', 'D', 'E']) G.add_edges_from([('A', 'B'), ('B','C'), ('C', 'D'), ('D', 'E')]) # 全量计算介数中心性 bw_centrality = nx.betweenness_centrality(G, normalized=True) # 提取节点A的结果 print(bw_centrality['A'])
- 大规模图高效计算
针对节点量级大的网络,可以调用nx.betweenness_centrality的nodes参数指定仅计算目标节点的指标,避免冗余计算,大幅降低耗时:
import networkx as nx # 构建示例图 G = nx.Graph() G.add_nodes_from(['A', 'B', 'C', 'D', 'E']) G.add_edges_from([('A', 'B'), ('B','C'), ('C', 'D'), ('D', 'E')]) # 仅计算节点A的介数中心性 bw_centrality_A = nx.betweenness_centrality(G, normalized=True, nodes=['A']) print(bw_centrality_A['A'])
注:示例中节点A是链的端点,没有任何最短路径经过它,所以计算得到的介数中心性结果为0,符合预期
内容的提问来源于stack exchange,提问作者Hamed Baziyad
相关产品推荐
相关产品推荐

