subgraph_view#
- subgraph_view(G, *, filter_node=<function no_filter>, filter_edge=<function no_filter>)[源代码]#
G
的视图,应用节点和边的过滤器。subgraph_view
提供输入图的只读视图,根据两个过滤函数filter_node
和filter_edge
的结果排除节点和边。filter_node
函数接受一个参数 — 节点 — 如果节点应包含在子图中,则返回True
,否则返回False
。filter_edge
函数接受两个参数(如果G
是多重图,则接受三个参数)— 描述边的节点,如果存在多重边,则还包括边键 — 如果边应包含在子图中,则返回True
,否则返回False
。节点和边过滤函数在查询图元素时被调用,这意味着创建视图时没有前期开销。
- 参数:
- 返回:
- graphnetworkx.Graph
输入图的只读图视图。
示例
>>> G = nx.path_graph(6)
过滤函数作用于节点,如果节点应出现在视图中,则返回
True
>>> def filter_node(n1): ... return n1 != 5 >>> view = nx.subgraph_view(G, filter_node=filter_node) >>> view.nodes() NodeView((0, 1, 2, 3, 4))
我们可以使用闭包模式根据额外数据过滤图元素 — 例如,根据附加到图上的边数据进行过滤
>>> G[3][4]["cross_me"] = False >>> def filter_edge(n1, n2): ... return G[n1][n2].get("cross_me", True) >>> view = nx.subgraph_view(G, filter_edge=filter_edge) >>> view.edges() EdgeView([(0, 1), (1, 2), (2, 3), (4, 5)])
>>> view = nx.subgraph_view( ... G, ... filter_node=filter_node, ... filter_edge=filter_edge, ... ) >>> view.nodes() NodeView((0, 1, 2, 3, 4)) >>> view.edges() EdgeView([(0, 1), (1, 2), (2, 3)])