当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。