如何基于NetworkX有向图计算入度与出度分布?
计算有向图的入度(in_degree)和出度(out_degree)分布
你的思路完全没问题,对于有向图来说,NetworkX已经帮我们分好了入度和出度的获取方法,只需要把原来的nx.degree替换成对应的入度/出度方法就可以了,和你计算总degree分布的逻辑完全一致:
1. 计算入度分布
NetworkX的nx.in_degree(G)方法会返回一个包含所有节点入度的字典,我们只需要提取它的values,再用numpy.histogram统计分布即可:
# 获取所有节点的入度值 in_degrees = list(nx.in_degree(G).values()) # 计算入度的分布 in_counts, in_bin_edges = np.histogram(in_degrees)
2. 计算出度分布
同理,用nx.out_degree(G)获取出度值,再做同样的直方图统计:
# 获取所有节点的出度值 out_degrees = list(nx.out_degree(G).values()) # 计算出度的分布 out_counts, out_bin_edges = np.histogram(out_degrees)
可选:更直观的度值计数(不用直方图)
如果你想直接看到每个具体度值对应的节点数量,而不是分箱后的结果,可以用collections.Counter来统计:
from collections import Counter # 入度的具体计数 in_degree_counter = Counter(in_degrees) # 出度的具体计数 out_degree_counter = Counter(out_degrees) # 比如打印入度为3的节点数量 print(f"入度为3的节点数:{in_degree_counter.get(3, 0)}")
这样就能分别得到入度和出度的分布啦~
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

