Graph.subgraph#
- Graph.subgraph(nodes)[source]#
返回由
nodes
诱导生成的 SubGraph 视图。图的诱导子图包含
nodes
中的节点以及这些节点之间的边。- 参数:
- nodes列表, 可迭代对象
一个包含节点的容器,它将被迭代一次。
- 返回值:
- G子图视图
图的子图视图。图结构不能改变,但节点/边属性可以改变,并且与原图共享。
注意
图、边和节点属性与原图共享。视图排除了对图结构的改变,但对属性的改变会反映在原图中。
要创建一个拥有自己独立的边/节点属性副本的子图,请使用: 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)]