dgl.DGLGraph.add_nodes
- DGLGraph.add_nodes(num, data=None, ntype=None)[源码]
添加具有相同节点类型的新节点
- 参数:
注意
对当前图进行就地更新。
如果
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
另请参阅