subgraph_view#

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

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

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

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

filter_edge 函数接受两个(如果是多图则三个)参数 — 描述一条边的节点,如果可能存在平行边则加上边键 — 并返回 True 如果该边应包含在子图中,返回 False 则不包含。

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

Parameters:
Gnetworkx.Graph

有向/无向图/多图

filter_nodecallable, 可选

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

filter_edgecallable, 可选

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

Returns:
graphnetworkx.Graph

输入图的只读图视图。

Examples

>>> 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)])