图神经网络(GNN)-第三方库(工具包):networkx【处理图的工具包】

一、Networkx是什么?

Networkx是一个构建网络和图的工具包,可以求解最短路问题,也可以求最大流,还可以专门用来画精美的网络图。这里我主要讲下Networkx构建图时,怎么用csv文件导入数据构建有权重的图。

二、构建一个图

from __future__ import print_function
import networkx as nx
import matplotlib.pyplot as plt
import csv

# 定义一个图
G = nx.Graph()

# 将边转换为元组!(u,v,w)均为数字,csv文件为三列,两列为起点和终点,第三列为权重。
f = open('文件路径.csv', 'r')
csv_reader = csv.reader(f)
font_weight = tuple(csv_reader)
# 将权重添加到边上
G.add_weighted_edges_from(font_weight)

# 另一种添加权重的方式
G = nx.read_weighted_edgelist('E:/Python-code/node_weight.edgelist')

其中node_weight.edgelist文件为

1	2	0.6
1	3	0.2
3	4	0.1
3	5	0.7
3	6	0.9
1	4	0.3

第一列为start,第二列为end,第三列为两点之间距离weight。

三、绘制一个图

# 画图,spring_layout是个布局方式,node_size是节点大小,with_lable是否显示图的标签。
nx.draw(G, pos=nx.spring_layout(G),  node_size=80, with_labels=True, color='black')
plt.show()

在这里插入图片描述

四、求两点之间的可行路径和最短路径

# 输出可行路径
simple_path = nx.all_simple_paths(G, '1', '10')
for n in simple_path:
    print(n)

# 输出1到10的最短路径
p1 = nx.shortest_path(G, source='1', target='10')
print(p1)

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']


获取两条边之间的权重

# 获取点与点之间的数据
get_nodes_weight = G.get_edge_data('1', '2')
print(get_nodes_weight)

求出最短路对应的最短距离,

只能求出点数,不能给出实际距离,求大佬告知,如何求出实际距离

# 计算最短路径长度,没有带权重的
p2 = nx.shortest_path_length(G, source='1', target='10')
print(p2)




参考资料:
Networkx图与网络工具包
networkx是什么

おすすめ

転載: blog.csdn.net/u013250861/article/details/121098312