图距离(两节点之间最短路径长/边数)
图距离是指两个节点之间的最短路径的长度(有关路径的概念请见上期)。
- 在无权图中,图距离表示两个节点之间的最短路径的边数(有权图每条边才有欧式距离等权重)
- 用于衡量图中节点之间的距离或相似性
1、寻找&绘制最短路径
- 用 networkx.shortest_path() 找到图中两节点之间最短路径图
#用俱乐部数据集,查看图
G = nx.karate_club_graph()
# 空手道俱乐部图
pos = nx.spring_layout(G,seed=3)
plt.figure(figsize = (14,9))
nx.draw_networkx(G, pos)
nx.draw_networkx_nodes(G,pos,nodelist = [12,18],node_color = 'r') #可选择任意几个点标红,这里选择12和18
plt.savefig('空手道俱乐部图.svg')
path_nodes = nx.shortest_path(G, 12, 18) # 找到节点12、18之间最短路径。返回一个数组[12, 0, 2, 32, 18]依次连接几个节点即可
path_edges = list(nx.utils.pairwise(path_nodes))
# 在路径节点序列中获取相邻元素的配对转化为边序列 [(12, 0), (0, 2), (2, 32), (32, 18)]
#(不封闭)参数 cyclic=False 为默认,当为True 生成首尾闭合路径边序列
plt.figure(figsize = (14,9))
nx.draw_networkx(G, pos)
nx.draw_networkx_nodes(G,pos,
nodelist = path_nodes,
node_color = 'r')
nx.draw_networkx_edges(G,pos,
edgelist = path_edges,
edge_color = 'r') #绘制最短路径节点,节点颜色为红色
plt.savefig('空手道俱乐部图,15、16最短路径.svg')
2、图距离矩阵
- 图距离矩阵:一张图每一对节点之间的图距离构造的矩阵,提供了图中节点之间的所有可能路径的距离信息。
# 成对最短距离值 (图距离)
distances_all = dict(nx.shortest_path_length(G)) #这里未选择某两个节点,意思是找到每个节点两两之间的最短路径距离。并转化为字典格式
# 创建图距离矩阵
list_nodes = list(G.nodes())
Shortest_D_matrix = np.full((len(G.nodes()),
len(G.nodes())), np.nan)
#将嵌套字典转换为图距离矩阵。第一个 for 循环遍历list_nodes 列表中的所有节点,相当于始点。第二层 for 循环相当于遍历所有终点
for i,