dgl.khop_graph

dgl.khop_graph(g, k, copy_ndata=True)[source]

返回一个图,其边连接原始图中的 k 跳邻居。

更具体地说,当且仅当在原始图中存在一条从节点 u 到节点 v 的长度为 k 的路径时,新图中才存在一条从节点 u 到节点 v 的边。

返回图的邻接矩阵是 \(A^k\) (其中 \(A\)\(g\) 的邻接矩阵)。

参数:
  • g (DGLGraph) – 输入图。

  • k (int) – k 跳图中的 \(k\)

  • copy_ndata (bool, 可选) –

    如果为 True,新图的节点特征将从原始图复制。

    如果为 False,新图将不包含任何节点特征。

    (默认值: True)

返回:

返回的图。

返回类型:

DGLGraph

注意

如果 copy_ndata 为 True,结果图将与输入图共享节点特征张量。因此,用户应尽量避免对任一图进行就地操作,因为这些操作将同时影响两个图。

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

示例

下面是一个简单的示例

>>> import dgl
>>> g = dgl.graph(([0, 1], [1, 2]))
>>> g_2 = dgl.transforms.khop_graph(g, 2)
>>> print(g_2.edges())
(tensor([0]), tensor([2]))

一个更复杂的示例

>>> import dgl
>>> g = dgl.graph(([0,1,2,3,4,0,1,2,3,4], [0,1,2,3,4,1,2,3,4,0]))
>>> dgl.khop_graph(g, 1)
DGLGraph(num_nodes=5, num_edges=10,
         ndata_schemes={}
         edata_schemes={})
>>> dgl.khop_graph(g, 3)
DGLGraph(num_nodes=5, num_edges=40,
         ndata_schemes={}
         edata_schemes={})