南宁网站设计方法,沈阳 网站开发,网站哪些付款二维码是怎么做的,玉溪建设局门户网站文章目录 1.连通度1.1 检查图是否连通1.2 检查有向图是否为强连通1.3 点连通度、边连通度#xff1a; 2.网络效率2.1全局效率2.2 局部效率2.2.1 查找子图2.2.3 局部效率源码分析 3.聚类系数#xff08;Clustering Coefficient#xff09;3.1 聚类系统源码分析 教程仓库地址 2.网络效率2.1全局效率2.2 局部效率2.2.1 查找子图2.2.3 局部效率源码分析 3.聚类系数Clustering Coefficient3.1 聚类系统源码分析 教程仓库地址github networkx_tutorial 本文从指标公式出发计算网络的连通度、全局效率、局部效率、聚类系数有需要的同学可在仓库下载ipynb文件进行练习. 1.连通度
文字部分来自GPT-4
import networkx as nx
import matplotlib. pyplot as plt
# 创建一个无向图
G nx.Graph()
# 添加边
G.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0), (0, 2)])
# # 绘制图形
nx.draw(G,node_size500,with_labelsTrue)
1.1 检查图是否连通
# 检查图是否连通
is_connected nx.is_connected(G)
print(fThe graph is connected: {is_connected})The graph is connected: True1.2 检查有向图是否为强连通
# 创建一个有向图
DG nx.DiGraph()
DG.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0), (0, 2)])
nx.draw(DG,node_size500,with_labelsTrue)
# 检查图是否强连通
is_strongly_connected nx.is_strongly_connected(DG)
print(fThe directed graph is strongly connected: {is_strongly_connected})The directed graph is strongly connected: True1.3 点连通度、边连通度 # 计算点连通度
node_connectivity nx.node_connectivity(G)
print(节点连通度, node_connectivity)
# 计算边连通度
edge_connectivity nx.edge_connectivity(G)
print(边连通度, edge_connectivity)节点连通度 2
边连通度 22.网络效率 2.1全局效率 # 创建一个简单的无向图
G nx.Graph()
G.add_nodes_from([1, 2, 3, 4])
G.add_edges_from([(1, 2), (1, 3), (2, 3), (3, 4)])# 绘制图形
pos nx.spring_layout(G)
nx.draw(G, pos, with_labelsTrue, node_colorlightblue, node_size500, font_size16, font_weightbold)
labels nx.get_edge_attributes(G, weight)
nx.draw_networkx_edge_labels(G, pos, edge_labelslabels, font_size12, font_colorred)
plt.show()
#计算指定节点对之间的效率节点之间最短路径的倒数
nx.efficiency(G,2,4) # 2,4 之间的最短路径长度为2,则两节点之间的效率为1/20.5# 全局网络效率官方函数
nx.global_efficiency(G)0.8333333333333334# 源码
def global_effi(G):n len(G)denom n * (n - 1)if denom ! 0:lengths nx.all_pairs_dijkstra_path_length(G)g_eff 0for source, targets in lengths:for target, distance in targets.items():if distance 0:g_eff 1 / distanceg_eff / denom# g_eff sum(1 / d for s, tgts in lengths# for t, d in tgts.items() if d 0) / denomelse:g_eff 0# path lengths in parallel.return g_effglobal_effi(GG)0.83333333333333342.2 局部效率
2.2.1 查找子图 # 定义要查找的节点子集
node_subset [1, 2, 3]
# 查找诱导子图
induced_subgraph G.subgraph(node_subset)
nx.draw(induced_subgraph,with_labels True)
# 查找生成子图
spanning_subgraph G.subgraph(G.nodes())
nx.draw(spanning_subgraph,with_labels True)
2.2.3 局部效率源码分析
nx.local_efficiency(G) 0.5833333333333334# 源码
sum 0 # 初始化 所有节点和其构成的子图 对应的全局效率的值
len(G) # G的节点数for v in G: # 遍历每个节点print(---{}节点的子图是----.format(v))# 找到每个节点的和其邻居构成的子图# fig,ax plt.subplots()# nx.draw(G.subgraph(G[v]),with_labels True,axax)g_effi nx.global_efficiency(G.subgraph(G[v]))print(邻居节点{}全局效率为{}.format(v,g_effi))sum sum g_effiprint(local_efficiency,sum/len(G)) #0.9166666666666667
---1节点的子图是----
邻居节点1全局效率为1.0
---2节点的子图是----
邻居节点2全局效率为1.0
---3节点的子图是----
邻居节点3全局效率为0.3333333333333333
---4节点的子图是----
邻居节点4全局效率为0
local_efficiency 0.58333333333333343.聚类系数Clustering Coefficient 3.1 聚类系统源码分析
# 官方函数
for node in G.nodes():c nx.clustering(G G,nodesnode)print(f节点 {node} 的聚类系数为 {c})节点 1 的聚类系数为 1.0
节点 2 的聚类系数为 1.0
节点 3 的聚类系数为 0.3333333333333333
节点 4 的聚类系数为 0# 1. 计算节点的k ,ki
# test_node : 3
node 3
# 邻居
neighbors list(G.neighbors(node))
# 度
k len(neighbors)
k # 节点3对应的k为33# 2. ei的计算
neighbors
for i in range(k):for j in range(i 1, k):if G.has_edge(neighbors[i], neighbors[j]):# print(neighbors[i], neighbors[j])triplets 1
triplets # 节点3对应的ei为32节点的聚类系数
# 计算每个节点的聚类系数
for node in G.nodes():# 获取节点的邻居节点neighbors list(G.neighbors(node))k len(neighbors)if k 2:# 如果邻居节点数少于 2聚类系数为 0clustering 0else:# 计算节点的三元组数量triplets 0for i in range(k):for j in range(i 1, k):if G.has_edge(neighbors[i], neighbors[j]):triplets 1# 计算聚类系数clustering 2 * triplets / (k * (k - 1))print(f节点 {node} 的聚类系数为 {clustering})节点 1 的聚类系数为 1.0
节点 2 的聚类系数为 1.0
节点 3 的聚类系数为 0.3333333333333333
节点 4 的聚类系数为 0整个网络的聚类系数C
nx.average_clustering(GG)0.5833333333333334