dgl.DGLGraph.add_nodes

DGLGraph.add_nodes(num, data=None, ntype=None)[源码]

添加具有相同节点类型的新节点

参数:
  • num (int) – 要添加的节点数量。

  • data (dict, optional) – 添加节点的特征数据。

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

注意

  • 对当前图进行就地更新。

  • 如果 data 的键不包含某些现有特征字段,则这些新节点的特征将由使用 set_n_initializer() 定义的初始化器创建(默认初始化器填充零)。

  • 如果 data 的键包含新的特征字段,则这些旧节点的特征将由使用 set_n_initializer() 定义的初始化器创建(默认初始化器填充零)。

  • 此函数会丢弃批次信息。请在转换后的图上使用 dgl.DGLGraph.set_batch_num_nodes()dgl.DGLGraph.set_batch_num_edges() 来维护信息。

示例

以下示例使用 PyTorch 后端。

>>> import dgl
>>> import torch

同构图或只有一个节点类型的异构图

>>> g = dgl.graph((torch.tensor([0, 1]), torch.tensor([1, 2])))
>>> g.num_nodes()
3
>>> g.add_nodes(2)
>>> g.num_nodes()
5

如果图有一些节点特征,并且添加的新节点没有特征,则它们的特征将由使用 set_n_initializer() 定义的初始化器创建。

>>> g.ndata['h'] = torch.ones(5, 1)
>>> g.add_nodes(1)
>>> g.ndata['h']
tensor([[1.], [1.], [1.], [1.], [1.], [0.]])

我们也可以在添加新节点时为新节点分配特征。

>>> g.add_nodes(1, {'h': torch.ones(1, 1), 'w': torch.ones(1, 1)})
>>> g.ndata['h']
tensor([[1.], [1.], [1.], [1.], [1.], [0.], [1.]])

由于 data 包含新的特征字段,因此旧节点的特征将由使用 set_n_initializer() 定义的初始化器创建。

>>> g.ndata['w']
tensor([[0.], [0.], [0.], [0.], [0.], [0.], [1.]])

具有多个节点类型的异构图

>>> 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.add_nodes(2)
DGLError: Node type name must be specified
if there are more than one node types.
>>> g.num_nodes('user')
3
>>> g.add_nodes(2, ntype='user')
>>> g.num_nodes('user')
5