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

如何使用NetworkX计算图的二阶度数?

计算图顶点的二阶度数(d₂(v))的NetworkX实现方法

NetworkX没有专门计算二阶度数(与顶点距离恰好为2的顶点数量)的内置函数,但可以通过现有工具快速实现,以下是两种可行方案:

方案1:基于最短路径长度统计(通用型)

适用于无向图、有向图或带权图,通过计算顶点到所有其他节点的最短路径长度,筛选出长度为2的节点数量:

import networkx as nx

# 构建示例图(可替换为你的图数据)
G = nx.Graph()
G.add_edges_from([(1,2), (2,3), (3,4), (2,4), (1,5)])

def calculate_second_order_degree(G, target_node):
    # 获取目标节点到所有节点的最短路径长度
    path_lengths = nx.shortest_path_length(G, source=target_node)
    # 统计路径长度恰好为2的节点数量
    return sum(1 for node, length in path_lengths.items() if length == 2)

# 计算顶点1的二阶度数
print(calculate_second_order_degree(G, 1))  # 输出:2(对应顶点3、4)

方案2:基于邻接集合运算(无向无权图优化版)

对于无向无权图,可通过“邻居的邻居”集合减去自身和直接邻居,得到距离为2的节点,效率比方案1更高:

def calculate_second_order_degree_optimized(G, target_node):
    direct_neighbors = set(G.neighbors(target_node))
    # 收集所有直接邻居的邻居
    neighbor_of_neighbors = set()
    for neighbor in direct_neighbors:
        neighbor_of_neighbors.update(G.neighbors(neighbor))
    # 排除自身和直接邻居,剩余即为距离为2的节点
    second_order_nodes = neighbor_of_neighbors - direct_neighbors - {target_node}
    return len(second_order_nodes)

# 验证结果一致性
print(calculate_second_order_degree_optimized(G, 1))  # 输出:2

注意事项

  • 若处理有向图,需调整方案:方案1自动适配方向;方案2需根据需求使用G.successors()(出邻居)或G.predecessors()(入邻居)替代G.neighbors()。
  • 大型图优先选择方案2,避免全图最短路径计算的性能开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:01:17