Example01 / 15
度、平均度、密度与度分布
用公式
Output输出图

Output文字输出
N=34, M=78, 平均度=4.59, 密度=0.139, nx.density=0.139 最大度 = 17(节点 33),最大度/平均度 = 3.7 度最大的 3 个节点: [(33, 17), (0, 16), (32, 12)]
Code代码
# 用公式 <k> = 2M/N 与 ρ = 2M/(N(N-1)) 计算平均度和密度,并用 nx.density 核对;
# 再计算最大度与平均度之比,画出度分布直方图 P(k)。
# 输出:平均度约 4.6,密度约 0.14;度分布右偏,度最大的是节点 33 与节点 0(俱乐部的两位核心人物)。
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.karate_club_graph()
N, M = G.number_of_nodes(), G.number_of_edges()
deg = np.array([d for _, d in G.degree()])
k_mean = 2 * M / N
rho = 2 * M / (N * (N - 1))
print("N=%d, M=%d, 平均度=%.2f, 密度=%.3f, nx.density=%.3f" % (N, M, k_mean, rho, nx.density(G)))
print("最大度 = %d(节点 %d),最大度/平均度 = %.1f" % (deg.max(), deg.argmax(), deg.max() / k_mean))
print("度最大的 3 个节点:", sorted(G.degree(), key=lambda x: -x[1])[:3])
ks, counts = np.unique(deg, return_counts=True)
plt.bar(ks, counts / N)
plt.xlabel("degree k")
plt.ylabel("P(k)")
plt.title("Karate club degree distribution")
plt.show()Run在浏览器中运行
首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。