【问题标题】:How do I get the giant component of a NetworkX graph?如何获得 NetworkX 图形的巨大组件?
【发布时间】:2014-09-29 17:45:31
【问题描述】:

我不知道 NetworkX 最近是否将其中一种方法调整为生成器,而不是返回列表,但我正在寻找一种好的(更确切地说,更好的)方法来获取图的 GC。

我有一个工作,但看起来效率很低,sn-p down:

# G = nx.Graph()
giant = sorted(nx.connected_component_subgraphs(G), key=len, reverse=True)[0]

有没有更清洁的方法?

【问题讨论】:

    标签: python networkx


    【解决方案1】:

    在 networkx 2.4 中,nx.connected_component_subgraphs() 已被弃用,因此以下内容应该有效:

    Gcc = sorted(nx.connected_components(G), key=len, reverse=True)
    G0 = G.subgraph(Gcc[0])
    

    G0 是巨型组件。

    【讨论】:

    • 谢谢,这是互联网上唯一一个我可以找到您需要subgraph 方法才能提取最大组件的地方。请注意,在这种情况下,G.subgraph(max(nx.connected_components(G), key=len)) 会更快。
    • @IanS 感谢您的解决方案。文档没有提到返回的组件只是一组节点,而不是子图networkx.org/documentation/stable/reference/algorithms/…
    • 我无法弄清楚如何在较新的版本中保留节点属性,因为不推荐使用 copy=True...
    【解决方案2】:

    在 networkx 1.9 中,connected_components_subgraphs 返回一个迭代器(而不是一个排序列表)。迭代器产生的值是not in sorted order。所以要找到最大的,使用max:

    giant = max(nx.connected_component_subgraphs(G), key=len)
    

    排序是 O(n log n)。取最大值是 O(n)。

    【讨论】:

    • 不知道您可以将key 参数与max 一起使用,有趣...connected_component_subgraphs 方法是在NX 中使用的最佳方法吗?
    • 是否可以对nx.connected_component_subgraphs() 进行排序以识别不是最大的组件而是所有?正如 OP 所指出的那样,通过对其进行排序,我们最终可能会得到一个 inefficient sn-p。是否有任何解决方法,尤其是对于庞大的网络
    • 这似乎不再适用于 2.4 版。 (请参阅networkx.github.io/documentation/stable/release/… 中的弃用)。
    猜你喜欢
    • 2012-03-13
    • 2013-06-17
    • 2013-09-04
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多