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


Python NetworkX transitive_closure用法及代碼示例


本文簡要介紹 networkx.algorithms.dag.transitive_closure 的用法。

用法:

transitive_closure(G, reflexive=False)

返回圖的傳遞閉包

G = (V,E) 的傳遞閉包是一個圖 G+ = (V,E+) 使得對於 V 中的所有 v, w 在 E+ 中存在一條邊 (v, w) 當且僅當存在從G 中的 v 到 w。

在此定義中,處理從 v 到 v 的路徑具有一定的靈活性。自反傳遞閉包為從 v 到 v 的長度為 0 的路徑創建一個自環。通常的傳遞閉包僅在存在循環時才創建一個自環(從 v 到 v 的長度 > 0 的路徑)。我們還允許選擇無自循環。

參數

GNetworkX 圖表

有向/無向圖/多重圖。

reflexiveBool 或 None,可選(默認值:False)

確定循環何時在傳遞閉包中創建自循環。如果為真,瑣碎循環(長度為 0)會創建自循環。結果是 G 的自反傳遞閉包。如果 False(默認)非平凡循環創建自循環。如果為 None,則不創建自循環。

返回

NetworkX 圖

G 的傳遞閉包

拋出

NetworkXError

如果 reflexive 不在 {None, True, False}

參考

1

https://www.ics.uci.edu/~eppstein/PADS/PartialOrder.py

例子

瑣碎(即長度為 0)周期的處理由 reflexive 參數控製。

reflexive=False(默認值)時,瑣碎(即長度為 0)循環不會創建自循環:

>>> DG = nx.DiGraph([(1, 2), (2, 3)])
>>> TC = nx.transitive_closure(DG, reflexive=False)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (2, 3)])

但是,當reflexive=False(默認值)時,非平凡(即長度大於 0)循環會創建自循環:

>>> DG = nx.DiGraph([(1, 2), (2, 3), (3, 1)])
>>> TC = nx.transitive_closure(DG, reflexive=False)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (1, 1), (2, 3), (2, 1), (2, 2), (3, 1), (3, 2), (3, 3)])

reflexive=True 時,平凡循環(長度 0)創建自循環:

>>> DG = nx.DiGraph([(1, 2), (2, 3)])
>>> TC = nx.transitive_closure(DG, reflexive=True)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 1), (1, 3), (2, 3), (2, 2), (3, 3)])

第三個選項是在 reflexive=None 時根本不創建自循環:

>>> DG = nx.DiGraph([(1, 2), (2, 3), (3, 1)])
>>> TC = nx.transitive_closure(DG, reflexive=None)
>>> TC.edges()
OutEdgeView([(1, 2), (1, 3), (2, 3), (2, 1), (3, 1), (3, 2)])

相關用法


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