dgl.line_graph

dgl.line_graph(g, backtracking=True, shared=False)[源代码]

返回该图的线图。

给定图 G 的线图 L(G) 被定义为另一个图,其中 L(G) 中的节点对应于 G 中的边。对于 G 中的任意一对边 (u, v)(v, w),边 (u, v)L(G) 中对应的节点将与边 (v, w)L(G) 中对应的节点连接一条边。

参数
  • g (DGLGraph) – 输入图。必须是同构图。

  • backtracking (bool, 可选) –

    如果为 False,则对应于边 (u, v) 的线图节点不会连接到对应于边 (v, u) 的线图节点。

    默认值:True。

  • shared (bool, 可选) – 是否将原始图的边特征复制为结果线图的节点特征。

返回

G – 该图的线图。

返回类型

DGLGraph

注释

  • 如果 shared 为 True,则结果图的节点特征与输入图的边特征共享相同的存储空间。因此,用户应尽量避免原地操作,这会同时影响两个图。

  • 该函数支持 GPU 上的输入图,但在计算过程中会将其复制到 CPU。

  • 此函数会丢弃批处理信息。请在转换后的图上使用 dgl.DGLGraph.set_batch_num_nodes()dgl.DGLGraph.set_batch_num_edges() 以保留信息。

示例

假设图具有以下邻接矩阵

A = [[0, 0, 1],
     [1, 0, 1],
     [1, 1, 0]]
>>> g = dgl.graph(([0, 1, 1, 2, 2],[2, 0, 2, 0, 1]), 'user', 'follows')
>>> lg = g.line_graph()
>>> lg
Graph(num_nodes=5, num_edges=8,
ndata_schemes={}
edata_schemes={})
>>> lg.edges()
(tensor([0, 0, 1, 2, 2, 3, 4, 4]), tensor([3, 4, 0, 3, 4, 0, 1, 2]))
>>> lg = g.line_graph(backtracking=False)
>>> lg
Graph(num_nodes=5, num_edges=4,
ndata_schemes={}
edata_schemes={})
>>> lg.edges()
(tensor([0, 1, 2, 4]), tensor([4, 0, 3, 1]))