先来几张重要的ppt,作为start
这张图介绍了图的嵌入表示,通过一个嵌入查找,来表示每一个节点。
这张图则是介绍了顶点嵌入的目标,就是使嵌入前和嵌入后的两个的相似度保持尽可能的相等。
好了下面开始上demo版本的代码:
import networkx as nx
2.生成一图,或者实例化一个图G
G = nx.Graph()
print(G.is_directed())
H = nx.DiGraph()
print(H.is_directed())
G.graph["Name"] = "Bar"
print(G.graph)
这里的DiGraph就是一个有向图(相信学术数据结构的大家一定不陌生)
这是对应的输出:
3.给图G增加节点
G.add_node(0, feature=5, label=0)
node_0_attr = G.nodes[0]
print("Node 0 has the attributes {}".format(node_0_attr))
输出如下:
4.查看一下图G的信息:
G.nodes(data=True)
5.增加多个节点
G.add_nodes_from([
(1, {"feature": 1, "label": 1}),
(2, {"feature": 2, "label": 2})
]) #(节点, 属性字典)
for node in G.nodes(data=True):
print(node)
num_nodes = G.number_of_nodes()
print("G has {} nodes".format(num_nodes))
输出:
6.给图G增加边(和边上的权重weight)
G.add_edge(0, 1, weight=0.5)
edge_0_1_attr = G.edges[(0, 1)]
print("Edge (0, 1) has the attributes {}".format(edge_0_1_attr))
输出:
7.增加多条边
G.add_edges_from([
(1, 2, {"weight": 0.3}),
(2, 0, {"weight": 0.1})
])
for edge in G.edges():
print(edge)
num_edges = G.number_of_edges()
print("G has {} edges".format(num_edges))
输出:
G现在一共有三条边
8.让我们来看看这个图G是个啥样子
nx.draw(G, with_labels = True)
输出:
很简单一个又三个顶点三条边组成的无向图
9.来顶点1的其他信息(度,还有邻居):
node_id = 1
print("Node {} has degree {}".format(node_id, G.degree[node_id]))
for neighbor in G.neighbors(node_id):
print("Node {} has neighbor {}".format(node_id, neighbor))
输出:
两个度,对应两个边,没错。
10.创建一个有向图,并且计算pagerank:
num_nodes = 4
# Create a new path like graph and change it to a directed graph
G = nx.DiGraph(nx.path_graph(num_nodes))
nx.draw(G, with_labels = True)
# Get the PageRank
pr = nx.pagerank(G, alpha=0.8)
pr
输出:
关于pagerank:
PageRank的基本思想是,一个网页的重要性可以通过其他网页指向它的数量和质量来衡量。具体来说,如果一个网页被许多其他网页链接到,那么它的重要性就会更高。而如果这些链接来自于其他重要的网页,那么这个网页的权重也会相应提高。 chatgpt
所以1和2这两个点的pagerank的值会比较高
这今天的教程就到这里,下面我会继续分享GNN相关的知识,如果您觉得这对您有帮助,请点个关注哦,也别忘了点个赞和在看。