dgl.add_self_loop
- dgl.add_self_loop(g, edge_feat_names=None, fill_data=1.0, etype=None)[源码]
为图中的每个节点添加自环并返回一个新图。
- 参数:
g (DGLGraph) – 图。
edge_feat_names (list[str], 可选) – 要应用 fill_data 的自环特征的名称。如果为 None,则将 fill_data 应用于所有自环特征。默认值:None。
fill_data (int, float 或 str, 可选) –
用于填充自环特征的值。默认值:1.0。
如果
fill_data
是int
或float
,则自环特征将直接取fill_data
的值。如果
fill_data
是str
,则自环特征将通过聚合对应节点的入边特征生成。支持的聚合方式有:'mean'
,'sum'
,'max'
,'min'
。
etype (str 或 (str, str, str), 可选) –
边的类型名称。允许的类型名称格式为:
(str, str, str)
表示源节点类型、边类型和目标节点类型。或者一个
str
边类型名称,如果该名称可以唯一标识图中的一个三元组格式。
如果图只有一种边类型,则可以省略。
- 返回值:
添加了自环的图。
- 返回类型:
注意事项
该函数仅支持同构图或异构图(但
etype
参数指定的关联图必须是同构的)。该函数无论自环是否已存在都会添加。如果希望每个节点只有一个自环,请在调用
remove_self_loop()
之前调用add_self_loop()
。此函数会丢弃批处理信息。请在变换后的图上使用
dgl.DGLGraph.set_batch_num_nodes()
和dgl.DGLGraph.set_batch_num_edges()
来保留信息。
示例
>>> import dgl >>> import torch
同构图
>>> g = dgl.graph((torch.tensor([0, 0, 2]), torch.tensor([2, 1, 0]))) >>> g.ndata['hv'] = torch.arange(3).float().reshape(-1, 1) >>> g.edata['he'] = torch.arange(3).float().reshape(-1, 1) >>> g = dgl.add_self_loop(g, fill_data='sum') >>> g Graph(num_nodes=3, num_edges=6, ndata_schemes={'hv': Scheme(shape=(1,), dtype=torch.float32)} edata_schemes={'he': Scheme(shape=(1,), dtype=torch.float32)}) >>> g.edata['he'] tensor([[0.], [1.], [2.], [2.], [1.], [0.]])
异构图
>>> g = dgl.heterograph({ ... ('user', 'follows', 'user'): (torch.tensor([1, 2]), ... torch.tensor([0, 1])), ... ('user', 'plays', 'game'): (torch.tensor([0, 1]), ... torch.tensor([0, 1]))}) >>> g = dgl.add_self_loop(g, etype='follows') >>> g Graph(num_nodes={'user': 3, 'game': 2}, num_edges={('user', 'plays', 'game'): 2, ('user', 'follows', 'user'): 5}, metagraph=[('user', 'user'), ('user', 'game')])