當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python NetworkX subgraph_view用法及代碼示例

本文簡要介紹 networkx.classes.graphviews.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 是 multi-graph 則為三個參數)——說明邊的節點,加上 edge-key(如果可能有平行邊)——如果應該包含邊,則返回 True 在子圖中,如果不應該包括 False

在查詢圖元素時,節點和邊過濾器函數都會被調用,這意味著創建視圖沒有 up-front 成本。

參數

Gnetworkx.Graph

有向/無向圖/多重圖

filter_node可調用的,可選的

將節點作為輸入的函數,如果節點應出現在視圖中,則返回 True

filter_edge可調用的,可選的

將說明邊的兩個節點作為輸入的函數(加上 edge-key,如果 G 是 multi-graph),如果邊應該出現在視圖中,則返回 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)])

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.classes.graphviews.subgraph_view。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。