dgl.to_bidirected
- dgl.to_bidirected(g, copy_ndata=False, readonly=None)[source]
将图转换为双向简单图并返回。
对于输入图
,返回一个新的图 ,使得边 存在的充要条件是存在边 。结果图 是一个简单图,意味着没有平行边。此操作仅适用于两个端点属于相同节点类型的边。如果输入图是异构图且包含端点类型不同的边,DGL 将抛出错误。
- 参数:
- 返回值:
双向图
- 返回类型:
注意事项
如果
copy_ndata
为 True,则结果图将与输入图共享节点特征张量。因此,用户应尽量避免会同时影响两个图的原位操作。此函数会丢弃批次信息。请在转换后的图上使用
dgl.DGLGraph.set_batch_num_nodes()
和dgl.DGLGraph.set_batch_num_edges()
来保留该信息。示例
以下示例使用 PyTorch 后端。
>>> import dgl >>> import torch as th >>> g = dgl.graph((th.tensor([0, 1, 2]), th.tensor([1, 2, 0]))) >>> bg1 = dgl.to_bidirected(g) >>> bg1.edges() (tensor([0, 1, 2, 1, 2, 0]), tensor([1, 2, 0, 0, 1, 2]))
图已经包含 i->j 和 j->i
>>> g = dgl.graph((th.tensor([0, 1, 2, 0]), th.tensor([1, 2, 0, 2]))) >>> bg1 = dgl.to_bidirected(g) >>> bg1.edges() (tensor([0, 1, 2, 1, 2, 0]), tensor([1, 2, 0, 0, 1, 2]))
具有多种边类型的异构图
>>> g = dgl.heterograph({ ... ('user', 'wins', 'user'): (th.tensor([0, 2, 0, 2]), th.tensor([1, 1, 2, 0])), ... ('user', 'follows', 'user'): (th.tensor([1, 2, 1]), th.tensor([2, 1, 1])) ... }) >>> bg1 = dgl.to_bidirected(g) >>> bg1.edges(etype='wins') (tensor([0, 0, 1, 1, 2, 2]), tensor([1, 2, 0, 2, 0, 1])) >>> bg1.edges(etype='follows') (tensor([1, 1, 2]), tensor([1, 2, 1]))