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可调用,可选

将描述一条边的两个节点作为输入的函数(加上边键if 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)])