这里仅用于记录一些DGL的常用基本操作,以便后续使用查阅。
DGL创建一个简单同构图
import dgl
import torch
# 边 0->1, 0->2, 0->3, 1->3
u, v = torch.tensor([0, 0, 0, 1]), torch.tensor([1, 2, 3, 3])
g = dgl.graph((u, v))
#节点特征
g.ndata['feat'] = torch.randn(4, 64)
#节点标签
g.ndata['label'] = torch.tensor([0,1,1,0])
print(g)
DGL计算节点的入度
degrees = g.in_degrees()
print(degrees)
计算指定节点的入度
degrees = g.in_degrees([0, 1])#计算节点0和1的入度
print(degrees)
计算节点的出度
degrees = g.out_degrees()
print(degrees)
DGL添加自边
#这里我让节点2不出现,于是这样的图结构深入到模型中计算会报错
u, v = torch.tensor([0, 0, 0, 1]), torch.tensor([1, 4, 3, 3])
g = dgl.graph((u, v))
print(g)
print(g.edges())
#添加自边后,图结构中会出现2->2的边
g = dgl.add_self_loop(g)
print("="*100)
print(g)
print(g.edges())
DGL默认出现的边中节点ID最大的为这个图网络的节点数目,因此可以提前声明节点的数目
u, v = torch.tensor([0, 0, 0, 1]), torch.tensor([1, 4, 3, 3])
g = dgl.graph((u, v), num_nodes=10)
print(g)
print(g.edges())
#添加自边
g = dgl.add_self_loop(g)
print("="*100)
print(g)
print(g.edges())