dgl.DGLGraph.add_edges
- DGLGraph.add_edges(u, v, data=None, etype=None)[source]
为指定的边类型添加多个新边
第i条新边将从
u[i]
到v[i]
。- Parameters:
u (int, tensor, numpy.ndarray, list) – 源节点ID,
u[i]
给出第i条新边的源节点。v (int, tensor, numpy.ndarray, list) – 目标节点ID,
v[i]
给出第i条新边的目标节点。data (dict, optional) – 添加的边的特征数据。特征数据的第i行对应于第i条新边。
注释
就地更新应用于当前图形。
如果添加边的终端节点不存在,则会调用add_nodes来添加新节点。新节点的节点特征将由
set_n_initializer()
定义的初始化器创建(默认初始化器填充零)。在某些情况下,建议先添加节点,然后再添加边。如果
data
的键不包含一些现有的特征字段,那么新边的这些特征将通过使用set_n_initializer()
定义的初始化器创建(默认初始化器填充零)。如果
data
的键包含新的特征字段,那么旧边的这些特征将通过使用set_n_initializer()
定义的初始化器创建(默认初始化器填充零)。This function discards the batch information. Please use
dgl.DGLGraph.set_batch_num_nodes()
anddgl.DGLGraph.set_batch_num_edges()
on the transformed graph to maintain the information.
示例
以下示例使用PyTorch后端。
>>> import dgl >>> import torch
同构图或具有单一边缘类型的异构图
>>> g = dgl.graph((torch.tensor([0, 1]), torch.tensor([1, 2]))) >>> g.num_edges() 2 >>> g.add_edges(torch.tensor([1, 3]), torch.tensor([0, 1])) >>> g.num_edges() 4
由于
u
或v
包含一个不存在的节点 ID,节点被隐式添加。 >>> g.num_nodes() 4如果图具有一些边特征,并且添加了没有特征的新边,它们的特征将通过使用
set_n_initializer()
定义的初始化器创建。>>> g.edata['h'] = torch.ones(4, 1) >>> g.add_edges(torch.tensor([1]), torch.tensor([1])) >>> g.edata['h'] tensor([[1.], [1.], [1.], [1.], [0.]])
我们还可以在添加新边时为这些新边分配特征。
>>> g.add_edges(torch.tensor([0, 0]), torch.tensor([2, 2]), ... {'h': torch.tensor([[1.], [2.]]), 'w': torch.ones(2, 1)}) >>> g.edata['h'] tensor([[1.], [1.], [1.], [1.], [0.], [1.], [2.]])
由于
data
包含新的特征字段,旧边的特征将通过使用set_n_initializer()
定义的初始化器来创建。>>> g.edata['w'] tensor([[0.], [0.], [0.], [0.], [0.], [1.], [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_edges(torch.tensor([3]), torch.tensor([3])) DGLError: Edge type name must be specified if there are more than one edge types. >>> g.num_edges('plays') 4 >>> g.add_edges(torch.tensor([3]), torch.tensor([3]), etype='plays') >>> g.num_edges('plays') 5
另请参阅