You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Networkx计算同标签节点的平均最短路径

计算同标签节点的平均最短路径

没问题,我来一步步帮你实现这个需求!针对你给出的无向图H,我们要计算标签为'A'的节点之间的平均最短路径,具体操作如下:

核心思路拆解

  • 筛选目标节点:先从图里把所有标签为'A'的节点提取出来,这里就是['A', 'C']。
  • 生成有效节点对:因为是无向图,两个节点的路径是双向的,所以只需要计算一次无序对(比如只算(A,C),不用重复算(C,A)),用itertools.combinations就能搞定。
  • 计算单对路径长度:用NetworkX的shortest_path_length方法获取每对节点的最短路径长度。
  • 求平均值:把所有路径长度求和,再除以节点对的数量,就得到平均最短路径了。

完整代码实现

import networkx as nx
from itertools import combinations

# 构建你给出的图结构
G = nx.DiGraph()
G.add_node('A', label='A')
G.add_node('B', label='B')
G.add_node('C', label='A')
G.add_node('D', label='B')
G.add_edges_from([('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'A')])
H = G.to_undirected()

# 1. 提取标签为'A'的节点集合
target_label = 'A'
nodes_with_label = [node for node, attrs in H.nodes(data=True) if attrs['label'] == target_label]

# 2. 生成所有不重复的节点对(无序)
node_pairs = list(combinations(nodes_with_label, 2))

# 3. 计算每对节点的最短路径长度
path_lengths = []
for u, v in node_pairs:
    length = nx.shortest_path_length(H, u, v)
    path_lengths.append(length)

# 4. 计算平均最短路径(处理无同标签节点的边界情况)
if len(path_lengths) == 0:
    average_path = 0
else:
    average_path = sum(path_lengths) / len(path_lengths)

print(f"标签为'{target_label}'的节点平均最短路径: {average_path}")

结果说明

在你的示例图里,标签为'A'的节点只有A和C,它们之间的最短路径是A-B-C,长度为2,所以最终输出的平均最短路径就是2.0。

如果你的图里有更多同标签节点(比如3个A标签节点),这个代码也能自动计算所有两两组合的路径长度平均值,完全通用~

内容的提问来源于stack exchange,提问作者waterline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:08:43