DGL官方教程--API--dgl.traversal

参考:https://docs.dgl.ai/en/latest/api/python/traversal.html

dgl.traversal 

图遍历方法模块。

图遍历算法作为python生成器实现,它在每次迭代时返回访问过的一组节点或边。命名约定为<algorithm>_[nodes|edges]_generator

用法示例如下。

g = ...  # some DGLGraph
for nodes in dgl.bfs_nodes_generator(g, 0):
    do_something(nodes)

 

bfs_nodes_generator(graph, source[, reverse])使用广度优先搜索的节点边界生成器。
bfs_edges_generator(graph, source[, reverse])使用广度优先搜索来生成边界前沿生成器。
topological_nodes_generator(graph[, reverse])使用拓扑遍历来生成节点边界生成器。
dfs_edges_generator(graph, source[, reverse])使用深度优先搜索(DFS)的边缘边界生成器。
dfs_labeled_edges_generator(graph, source[, …])在按类型标记的深度优先搜索(DFS)中生成边缘.

 

 

dgl.traversal.bfs_nodes_generator 

dgl.traversal.bfs_nodes_generator(graph,source,reverse = False)

使用广度优先搜索的节点边界生成器。

参数:
  • graphDGLGraph)–图形对象。
  • source (listtensor of nodes) –源节点。
  • reverse (booldefault False) –如果为True,则沿边缘方向移动。
返回值:

每个节点边界都是节点ID或张量的列表

返回类型:

节点边界列表

例子

给定一个图(有向的,边是从小节点id到大节点的id):

      2 - 4
     / \
0 - 1 - 3 - 5
>>> g = dgl.DGLGraph([(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)])
>>> list(dgl.bfs_nodes_generator(g, 0))
[tensor([0]), tensor([1]), tensor([2, 3]), tensor([4, 5])]

 

dgl.traversal.bfs_edges_generator 

dgl.traversal.bfs_edges_generator(graph,source,reverse = False)

使用广度优先搜索来生成边界前沿生成器。

参数:
  • graphDGLGraph)–图形对象。
  • source (listtensor of nodes)–源节点。
  • reverse (booldefault False–如果为True,则沿边缘方向移动。
返回值:

每个边缘边界都是边缘ID或张量的列表

返回类型:

边缘列表

例子

给定一个图(有向的,从小节点id指向大节点id的有向边,按源-目的节点id元组的字典顺序排序。)

      2 - 4
     / \
0 - 1 - 3 - 5
>>> g = dgl.DGLGraph([(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)])
>>> list(dgl.bfs_edges_generator(g, 0))
[tensor([0]), tensor([1, 2]), tensor([4, 5])]

 

 

dgl.traversal.topological_nodes_generator 

dgl.traversal.topological_nodes_generator(graph,reverse = False)

使用拓扑遍历的节点边界生成器。

参数:
  • graphDGLGraph)–图形对象。
  • reverse (booloptional)–如果为True,则沿边缘方向移动。
返回值:

每个节点边界都是节点ID或张量的列表。

返回类型:

节点边界列表

例子

给定一个图(从小节点id到大节点的有向边):

      2 - 4
     / \
0 - 1 - 3 - 5
>>> g = dgl.DGLGraph([(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)])
>>> list(dgl.topological_nodes_generator(g))
[tensor([0]), tensor([1]), tensor([2]), tensor([3, 4]), tensor([5])]

 

 

dgl.traversal.dfs_edges_generator 

dgl.traversal.dfs_edges_generator(graph,source,reverse = False

使用深度优先搜索(DFS)的边缘边界生成器。

可以指定多个源节点来启动DFS遍历。需要确保每个源节点都属于不同的连接组件,这样就可以方便地合并边界。否则,行为是未定义的。

参数:
  • graphDGLGraph)–图形对象。
  • source (listtensor of nodes–源节点。
  • reverse (booloptional–如果为True,则沿边缘方向移动。
返回值:

每个边缘边界都是边缘ID或张量的列表。

返回类型:

边缘列表

例子

给定一个图(从小节点id到大节点的有向边):

      2 - 4
     / \
0 - 1 - 3 - 5

边添加顺序[(0,1),(1,2),(1,3),(2,3),(2,4),(3,5)]

>>> g = dgl.DGLGraph([(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)])
>>> list(dgl.dfs_edges_generator(g, 0))
[tensor([0]), tensor([1]), tensor([3]), tensor([5]), tensor([4])]

PS:这里为啥2没了??????

 

 

dgl.traversal.dfs_labeled_edges_generator 

dgl.traversal.dfs_labeled_edges_generator(graph,source,reverse = False,has_reverse_edge = False,has_nontree_edge = False,return_labels = True)

在按类型标记的深度优先搜索(DFS)中产生边。

有三个标签:FORWARD(0),REVERSE(1),NONTREE(2)

前向边是其中u已被访问但v没有被访问的边。REVERSE边缘是u和v都已被访问并且该边缘在DFS树中的边缘。NONTREE边是u和v 都已被访问但该边不在DFS树中的边。

有关 详细信息,请参见networkxdfs_labeled_edges

可以指定多个源节点来启动DFS遍历。需要确保每个源节点都属于不同的连接组件,以便可以轻松合并边界。否则,行为是不确定的。

参数:
  • graphDGLGraph)–图形对象。
  • source (listtensor of nodes) –源节点。
  • reverse (booloptional) –如果为true,则沿边缘方向移动。
  • has_reverse_edge (booloptional) –真,包括反向边缘。
  • has_nontree_edge (booloptional)–真,包括非树边缘。
  • return_labels (booloptional) –真,返回每个边缘的标签。
返回值:

 

  • 边缘边界列表 –每个边缘边界都是边缘ID或张量的列表。
  • int类型的列表 –每个边缘的标签,其组织顺序与边缘边界相同。

 

例子

给定一个图(从小节点id到大节点的有向边):

      2 - 4
     / \
0 - 1 - 3 - 5

边添加顺序[(0,1),(1,2),(1,3),(2,3),(2,4),(3,5)]

>>> g = dgl.DGLGraph([(0, 1), (1, 2), (1, 3), (2, 3), (2, 4), (3, 5)])
>>> list(dgl.dfs_labeled_edges_generator(g, 0, has_nontree_edge=True))
(tensor([0]), tensor([1]), tensor([3]), tensor([5]), tensor([4]), tensor([2])),
(tensor([0]), tensor([0]), tensor([0]), tensor([0]), tensor([0]), tensor([2]))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值