subgraph_view#

subgraph_view(G, *, filter_node=<function no_filter>, filter_edge=<function no_filter>)[源代码]#

G 的视图,应用节点和边的过滤器。

subgraph_view 提供输入图的只读视图,根据两个过滤函数 filter_nodefilter_edge 的结果排除节点和边。

filter_node 函数接受一个参数 — 节点 — 如果节点应包含在子图中,则返回 True,否则返回 False

filter_edge 函数接受两个参数(如果 G 是多重图,则接受三个参数)— 描述边的节点,如果存在多重边,则还包括边键 — 如果边应包含在子图中,则返回 True,否则返回 False

节点和边过滤函数在查询图元素时被调用,这意味着创建视图时没有前期开销。

参数:
Gnetworkx.Graph

一个有向/无向图/多重图

filter_node可调用对象,可选

一个函数,接受节点作为输入,如果节点应出现在视图中,则返回 True

filter_edge可调用对象,可选

一个函数,接受描述边的两个节点作为输入(如果 G 是多重图,则还包括边键),如果边应出现在视图中,则返回 True

返回:
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)])