是否有一种简单的方法可以修剪NetworkX图中断开连接的网络?

时间:2013-11-15 23:40:39

标签: python social-networking networkx

我正在使用Python的NetworkX软件包为不同大小的网络计算一堆网络统计信息。我正在扫描一个系统地修剪边缘的独立参数,因此有时一个小网络将与主网络断开连接。是否有一种简单的方法来检测和删除NetworkX中那些较小的断开连接的网络?

3 个答案:

答案 0 :(得分:5)

索林是正确的。该功能在NetworkX中称为connected_component_subgraphs

文档:http://networkx.github.io/documentation/latest/reference/generated/networkx.algorithms.components.connected.connected_component_subgraphs.html#networkx.algorithms.components.connected.connected_component_subgraphs

以下是一些代码,可以找到NetworkX图中最大的网络:

cur_graph = # whatever graph you're working with

if not nx.is_connected(cur_graph):
    # get a list of unconnected networks
    sub_graphs = nx.connected_component_subgraphs(cur_graph)

    main_graph = sub_graphs[0]

    # find the largest network in that list
    for sg in sub_graphs:
        if len(sg.nodes()) > len(main_graph.nodes()):
            main_graph = sg

    cur_graph = main_graph

答案 1 :(得分:1)

通用算法称为连通组件。您可以在此处找到说明:http://en.wikipedia.org/wiki/Connected_component_(graph_theory)。它的实现相当容易,并且要运行的边数是线性的。

不确定NetworkX。

答案 2 :(得分:0)

由于现在已弃用已接受的答案,因此对于无向图 = G:

# Generate connected components and select the largest:
largest_component = max(nx.connected_components(G), key=len)

# Create a subgraph of G consisting only of this component:
G2 = G.subgraph(largest_component)

对于有向图,您将需要strongly_connected_components(G)weakly_connected_components(G)代替connected_components(G)

https://networkx.github.io/documentation/stable/reference/algorithms/component.html