DiGraph.subgraph#

DiGraph.subgraph(nodes)#

返回在节点集合 nodes 上诱导的子图视图 (SubGraph view)。

图的诱导子图包含 nodes 中的节点以及这些节点之间的边。

参数:
nodeslist, 可迭代对象 (iterable)

一个包含节点的容器,将被遍历一次。

返回值:
G子图视图 (SubGraph View)

图的子图视图。图的结构不能改变,但节点/边的属性可以改变,并且与原始图共享。

注意

图、边和节点的属性与原始图共享。通过视图无法改变图的结构,但对属性的改变会反映在原始图中。

要创建一个拥有独立边/节点属性副本的子图,请使用:G.subgraph(nodes).copy()

要原地将图缩减为子图,可以移除节点:G.remove_nodes_from([n for n in G if n not in set(nodes)])

子图视图有时不是您想要的。在大多数情况下,如果您想做的不仅仅是查看诱导边,那么将其作为独立图创建子图会更有意义,代码示例如下:

# Create a subgraph SG based on a (possibly multigraph) G
SG = G.__class__()
SG.add_nodes_from((n, G.nodes[n]) for n in largest_wcc)
if SG.is_multigraph():
    SG.add_edges_from(
        (n, nbr, key, d)
        for n, nbrs in G.adj.items()
        if n in largest_wcc
        for nbr, keydict in nbrs.items()
        if nbr in largest_wcc
        for key, d in keydict.items()
    )
else:
    SG.add_edges_from(
        (n, nbr, d)
        for n, nbrs in G.adj.items()
        if n in largest_wcc
        for nbr, d in nbrs.items()
        if nbr in largest_wcc
    )
SG.graph.update(G.graph)

示例

>>> G = nx.path_graph(4)  # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> H = G.subgraph([0, 1, 2])
>>> list(H.edges)
[(0, 1), (1, 2)]