dgl.remove_nodes

dgl.remove_nodes(g, nids, ntype=None, store_ids=False)[source]

移除指定的节点并返回一个新图。

同时删除特征。连接到/从这些节点的边也将被移除。移除后,DGL 会将剩余的节点和边重新编号,ID 从 0 开始。

参数:
  • nids (int, Tensor, iterable[int]) – 要移除的节点。

  • ntype (str, optional) – 要移除的节点类型。如果图中只有一种节点类型,则可以省略。

  • store_ids (bool, optional) – 如果为 True,它将把提取出的节点和边的原始 ID 分别存储在结果图的 ndataedata 中,名称分别为 dgl.NIDdgl.EID

返回值:

删除了节点的图。

返回值类型:

DGLGraph

说明

此函数会丢弃批量信息。请在变换后的图上使用 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([0, 1, 2])))
>>> g.ndata['hv'] = torch.arange(3).float().reshape(-1, 1)
>>> g.edata['he'] = torch.arange(3).float().reshape(-1, 1)
>>> g = dgl.remove_nodes(g, torch.tensor([0, 1]))
>>> g
Graph(num_nodes=1, num_edges=1,
    ndata_schemes={'hv': Scheme(shape=(1,), dtype=torch.float32)}
    edata_schemes={'he': Scheme(shape=(1,), dtype=torch.float32)})
>>> g.ndata['hv']
tensor([[2.]])
>>> g.edata['he']
tensor([[2.]])

异构图

>>> g = dgl.heterograph({
...     ('user', 'plays', 'game'): (torch.tensor([0, 1, 1, 2]),
...                                 torch.tensor([0, 0, 1, 1])),
...     ('developer', 'develops', 'game'): (torch.tensor([0, 1]),
...                                         torch.tensor([0, 1]))
...     })
>>> g = dgl.remove_nodes(g, torch.tensor([0, 1]), ntype='game')
>>> g.num_nodes('user')
3
>>> g.num_nodes('game')
0
>>> g.num_edges('plays')
0