【问题标题】:Find root of each node in graph using NetworkX使用 NetworkX 查找图中每个节点的根
【发布时间】:2020-07-17 17:10:20
【问题描述】:

如何使用 NetworkX 获取图中每个节点的根?

这是我的图表示例:

预期结果:

节点 4 有根:0

节点 2 有根:0

节点 1 有根:0

节点 0 有根:0

节点 3 有根:8

节点 5 有根:8

节点 8 有根:8

我创建了一个while循环来获取节点的根,它运行良好,除非它很慢。

对于大型网络,有什么有效的方法可以做到这一点吗?

【问题讨论】:

    标签: python-3.x graph networkx graph-theory


    【解决方案1】:

    假设您每个组件有一个根节点,您可以从查找图中的所有根节点开始,检查哪些节点的度数为0。识别后,遍历nx.weakly_connected_components,找出属于它的根节点:

    roots = {n for n,d in G.in_degree() if d==0}
    d = {}
    for comp in nx.weakly_connected_components(G):
        comp_root = next(root for root in roots if root in comp)
        d.update(dict.fromkeys(comp, comp_root))  
    

    print(d)
    {0: 0, 1: 0, 2: 0, 4: 0, 8: 8, 3: 8, 5: 8}
    

    【讨论】:

    • 太棒了!谢谢,我认为答案是有效的,由于出现了一个奇怪的问题,我仍在努力。
    • 是的,这是预期的行为,对吗? 1 和 2 连接较弱,因为您只能通过节点 1 到达节点 2,而不是 @SatrioAdiPrabowo
    • 啊,是的,对不起,我的错。问题出在我的数据上,这个假设不知何故不成立。我需要清洁它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2020-10-09
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多