Networkx计算有向图平均入度与出度结果相同的异常问询
问题分析与解决
你的代码语法上没有问题,但nx.info()返回的平均入度和出度数值相同是必然结果——因为对于任何有向图,总入度等于总出度,两者都等于图中的边数。当用总入度/总节点数、总出度/总节点数计算平均值时,结果自然一致。
你提到“平均入度应高于平均出度”,大概率是混淆了两种平均统计方式:
nx.info()的平均是所有节点的平均(包括没有入度/出度的孤立节点)- 你预期的可能是仅统计有入度/出度节点的平均
手动计算符合预期的平均值
如果要验证你预期的情况,可以用以下代码计算:
# 计算有入度节点的平均入度 in_degrees = G.in_degree() total_in = sum(d for n, d in in_degrees) nodes_with_in = sum(1 for n, d in in_degrees if d > 0) avg_in = total_in / nodes_with_in if nodes_with_in > 0 else 0 # 计算有出度节点的平均出度 out_degrees = G.out_degree() total_out = sum(d for n, d in out_degrees) nodes_with_out = sum(1 for n, d in out_degrees if d > 0) avg_out = total_out / nodes_with_out if nodes_with_out > 0 else 0 print(f"有入度节点的平均入度: {avg_in}") print(f"有出度节点的平均出度: {avg_out}")
额外排查点
如果计算后还是不符合预期,可以检查数据:
- 是否存在重复边:重复边会同时增加入度和出度的总和,不影响比例,但可能导致数值偏差
- 是否有节点数据异常:比如Source和Target列是否有非整数、空值,或者导入时类型错误
- 是否误将无向图当作有向图处理:你的代码已经指定
create_using=nx.DiGraph,这部分没问题
内容的提问来源于stack exchange,提问作者Em_Rose
相关产品推荐
相关产品推荐

