dgl.metapath_reachable_graph
功能
返回的是由metapath的起点和终点组成的边;新的graph的node num始终和metapath中起点type的nodes的数目一致(当metapath的起点终点是同一个type);所以最终graph中只有metapath起点node type和终点node type的nodes集合
"""Return a graph where the successors of any node ``u`` are nodes reachable from ``u`` bythe given metapath.If the beginning node type ``s`` and ending node type ``t`` are the same, it will returna homogeneous graph with node type ``s = t``. Otherwise, a unidirectional bipartite graphwith source node type ``s`` and destination node type ``t`` is returned.In both cases, two nodes ``u`` and ``v`` will be connected with an edge ``(u, v)`` ifthere exists one path matching the metapath from ``u`` to ``v``.The result graph keeps the node set of type ``s`` and ``t`` in the original graph even ifthey might have no neighbor.The features of the source/destination node type in the original graph would be copied tothe new graph.Parameters----------g : DGLGraphThe input graphmetapath : list[str or tuple of str]Metapath in the form of a list of edge typesReturns-------DGLGraphA homogeneous or unidirectional bipartite graph. It will be on CPU regardless ofwhether the input graph is on CPU or GPU.Notes-----This function discards the batch information. Please use:func:`dgl.DGLGraph.set_batch_num_nodes`and :func:`dgl.DGLGraph.set_batch_num_edges` on the transformed graphto maintain the information.Examples-------->>> g = dgl.heterograph({... ('A', 'AB', 'B'): ([0, 1, 2], [1, 2, 3]),... ('B', 'BA', 'A'): ([1, 2, 3], [0, 1, 2])})>>> new_g = dgl.metapath_reachable_graph(g, ['AB', 'BA'])>>> new_g.edges(order='eid')(tensor([0, 1, 2]), tensor([0, 1, 2]))"""
示例
g = dgl.heterograph({('A', 'AB', 'B'): ([0, 0,1], [0,1,1]),('B', 'BA', 'A'): ([0,1,1], [0,0,1]),('B', 'BC', 'C'): ([0], [0]),('C', 'CB', 'B'): ([0], [0])})
new_g = dgl.metapath_reachable_graph(g, ['AB'])
new_g.edges(order='eid')
print(new_g)
>>>Graph(num_nodes={'A': 2, 'B': 2},num_edges={('A', '_E', 'B'): 3},metagraph=[('A', 'B', '_E')])
g = dgl.heterograph({('A', 'AB', 'B'): ([0, 0,1], [0,1,1]),('B', 'BA', 'A'): ([0,1,1], [0,0,1]),('B', 'BC', 'C'): ([0], [0]),('C', 'CB', 'B'): ([0], [0])})
new_g = dgl.metapath_reachable_graph(g, ['AB','BA'])
new_g.edges(order='eid')
print(new_g)
>>>Graph(num_nodes=2, num_edges=4,ndata_schemes={}edata_schemes={})
g = dgl.heterograph({('A', 'AB', 'B'): ([0, 0,1], [0,1,1]),('B', 'BA', 'A'): ([0,1,1], [0,0,1]),('B', 'BC', 'C'): ([0], [0]),('C', 'CB', 'B'): ([0], [0])})
new_g = dgl.metapath_reachable_graph(g, ['AB','BC','CB','BA'])
new_g.edges(order='eid')
print(new_g)
>>>Graph(num_nodes=2, num_edges=1,ndata_schemes={}edata_schemes={})
g = dgl.heterograph({('A', 'AB', 'B'): ([0, 1, 2], [1, 2, 3]),('B', 'BA', 'A'): ([1, 2, 3], [0, 1, 2])})
new_g = dgl.metapath_reachable_graph(g, ['AB', 'BA'])
print(new_g)
Graph(num_nodes=3, num_edges=3,ndata_schemes={}edata_schemes={})
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!