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, floatstr, 可选) –

    用于填充自环特征的值。默认值:1.0。

    • 如果 fill_dataintfloat,则自环特征将直接取 fill_data 的值。

    • 如果 fill_datastr,则自环特征将通过聚合对应节点的入边特征生成。支持的聚合方式有:'mean', 'sum', 'max', 'min'

  • etype (str(str, str, str), 可选) –

    边的类型名称。允许的类型名称格式为:

    • (str, str, str) 表示源节点类型、边类型和目标节点类型。

    • 或者一个 str 边类型名称,如果该名称可以唯一标识图中的一个三元组格式。

    如果图只有一种边类型,则可以省略。

返回值:

添加了自环的图。

返回类型:

DGLGraph

注意事项

示例

>>> 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')])