基于networkx计算对比固定n、d时不同p值的50个WS小世界图的聚类系数与特征路径长度
WS小世界图参数扫描正确实现方案
初始代码存在的核心问题
- p值生成逻辑错误:Python内置
range函数仅支持整数取值、整数步长,你写的range(0,1,50)会返回空序列,完全无法触发循环;你需要的0到1区间内50个均匀分布的p值,根本不能用内置range生成。 - 流程不完整:仅完成了图生成步骤,没有实现两个核心指标的计算,也没有留存对应结果支撑后续对比。
- 缺少计算注意事项:计算平均最短路径长度时,需要考虑图的连通性情况,避免触发算法报错。
修正后的完整实现代码
import networkx as nx import numpy as np # 固定全局超参数 n, d = 1000, 5 # 生成[0,1]闭区间内均匀分布的50个p取值 p_list = np.linspace(start=0, stop=1, num=50) # 初始化列表存储对应计算结果 clustering_result = [] path_length_result = [] for p in p_list: # 生成WS小世界图,原代码中k=2*d的参数设置是正确的 ws_graph = nx.watts_strogatz_graph(n=n, k=2*d, p=p) # 计算图的平均聚类系数 avg_c = nx.average_clustering(ws_graph) # 计算图的特征路径长度(即全局平均最短路径) avg_l = nx.average_shortest_path_length(ws_graph) # 将结果存入对应列表 clustering_result.append(avg_c) path_length_result.append(avg_l)
后续对比的实现思路
- 可以直接将两组结果和p值做绑定,整理成二维表查看每个p对应的指标值:每行包含当前p、对应聚类系数、对应特征路径长度,直观对比不同p下的两个指标差异。
- 做经典特性对比时,可对两个指标做归一化处理:将每个p下的聚类系数除以p=0时的规则图最大聚类值,将每个p下的特征路径长度除以p=0时的规则图最大路径长度,就能复现WS小世界的核心曲线特征——p从0逐步增大的过程中,聚类系数仅出现缓慢下降,但特征路径长度会快速降低到接近随机图的水平,中间的p区间就是具备小世界特性的参数范围。
- 注意:n=1000规模的图计算全局最短路径的计算量不低,50个p值的整体计算时长大概在数分钟级别,属于正常运行状态;若运行中触发“图不连通”的报错,可以在计算前提取图的最大连通分量做指标计算,该规模下的WS图在全p取值范围内连通率很高,很少出现不连通情况。
内容的提问来源于stack exchange,提问作者Keralf2020
相关产品推荐
相关产品推荐

