networkx.algorithms.dag.dag_to_branching
的用法。用法:
dag_to_branching(G)
返回一个分支,表示给定有向无环图中从根节点到叶节点的所有(重叠)路径。
如
networkx.algorithms.tree.recognition
中所述,branching
是一个有向森林,其中每个节点最多有一个父节点。换句话说,分支是arborescences
的不相交并集。对于此函数,G
中度数为零的每个节点都将成为其中一个树状结构的根,并且从该根到G
中的叶节点的每条不同路径都有一个叶节点。G
中的每个节点v
和k
父节点在返回的分支中成为k
不同的节点,每个父节点一个节点,并且每个副本都复制以v
为根的 sub-DAG。然后该算法在v
的每个副本的子代上递归。- G:NetworkX 图
有向无环图。
- 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])
相关用法
- Python NetworkX dag_longest_path_length用法及代码示例
- Python NetworkX dag_longest_path用法及代码示例
- Python NetworkX dedensify用法及代码示例
- Python NetworkX draw_networkx_edge_labels用法及代码示例
- Python NetworkX double_edge_swap用法及代码示例
- Python NetworkX draw用法及代码示例
- Python NetworkX descendants_at_distance用法及代码示例
- Python NetworkX degree_assortativity_coefficient用法及代码示例
- Python NetworkX dfs_successors用法及代码示例
- Python NetworkX draw_planar用法及代码示例
- Python NetworkX draw_circular用法及代码示例
- Python NetworkX dijkstra_path_length用法及代码示例
- Python NetworkX descendants用法及代码示例
- Python NetworkX draw_spectral用法及代码示例
- Python NetworkX degree_mixing_matrix用法及代码示例
- Python NetworkX dijkstra_path用法及代码示例
- Python NetworkX degrees用法及代码示例
- Python NetworkX degree_pearson_correlation_coefficient用法及代码示例
- Python NetworkX directed_configuration_model用法及代码示例
- Python NetworkX draw_random用法及代码示例
- Python NetworkX directed_joint_degree_graph用法及代码示例
- Python NetworkX draw_shell用法及代码示例
- Python NetworkX difference用法及代码示例
- Python NetworkX disjoint_union用法及代码示例
- Python NetworkX draw_networkx用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.dag.dag_to_branching。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。