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


Python NetworkX dag_to_branching用法及代碼示例


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

用法:

dag_to_branching(G)

返回一個分支,表示給定有向無環圖中從根節點到葉節點的所有(重疊)路徑。

networkx.algorithms.tree.recognition 中所述,branching 是一個有向森林,其中每個節點最多有一個父節點。換句話說,分支是 arborescences 的不相交並集。對於此函數,G 中度數為零的每個節點都將成為其中一個樹狀結構的根,並且從該根到 G 中的葉節點的每條不同路徑都有一個葉節點。

G 中的每個節點 vk 父節點在返回的分支中成為 k 不同的節點,每個父節點一個節點,並且每個副本都複製以 v 為根的 sub-DAG。然後該算法在 v 的每個副本的子代上遞歸。

參數

GNetworkX 圖

有向無環圖。

返回

DiGraph

G 中的root-to-leaf 路徑(其中多個路徑可能共享同一個葉子)和分支中的root-to-leaf 路徑之間存在雙射的分支(其中從根到葉子的路徑是唯一的) )。

每個節點都有一個屬性‘source’,其值為該節點對應的原始節點。沒有其他圖形、節點或邊屬性被複製到這個新圖形中。

拋出

NetworkXNotImplemented

如果 G 不是定向的,或者如果 G 是多圖。

HasACycle

如果G 不是非循環的。

注意

這個函數不是冪等的,因為每次調用該函數時,返回的分支中的節點標簽可能是唯一生成的。事實上,節點標簽可能不是整數;為了將節點重新標記為更具可讀性,您可以使用 networkx.convert_node_labels_to_integers() 函數。

此函數的當前實現使用 networkx.prefix_tree() ,因此受該函數的限製。

例子

為了檢查返回分支中的哪些節點是由有向無環圖中的哪個原始節點產生的,我們可以將源節點到新節點的映射收集到字典中。例如,考慮有向菱形圖:

>>> from collections import defaultdict
>>> from operator import itemgetter
>>>
>>> G = nx.DiGraph(nx.utils.pairwise("abd"))
>>> G.add_edges_from(nx.utils.pairwise("acd"))
>>> B = nx.dag_to_branching(G)
>>>
>>> sources = defaultdict(set)
>>> for v, source in B.nodes(data="source"):
...     sources[source].add(v)
>>> len(sources["a"])
1
>>> len(sources["d"])
2

要將節點屬性從原始圖複製到新圖,您可以使用上麵示例中構造的字典:

>>> for source, nodes in sources.items():
...     for v in nodes:
...         B.nodes[v].update(G.nodes[source])

相關用法


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