我有两个问题。
在无向图中,我想找到最大的连通分量。
我阅读了networkX的API文档,找到了这个功能
nx.connected_component_subgraphs()
。但我不知道如何使用它,因为它的返回值是一个生成器,我无法得到最大连通分量的子图。
与一个相同。但图表是针对性的。我想找到有向图中最大的弱连通分量。因此,我使用nx.weakly_connected_component_subgraphs()
这个函数。问题1中存在同样的问题。
如何使用networkX中的内置函数查找无向图中最大的连通分量和有向图中最大的弱连通分量?
我使用的是NetworkX 1.9.1。
答案 0 :(得分:5)
NetworkX组件函数返回Python生成器。您可以使用Python list
函数在生成器中创建项列表。这是一个示例,显示并找到最大的弱连接组件。
In [1]: import networkx as nx
In [2]: G = nx.DiGraph()
In [3]: G.add_path([1,2,3,4])
In [4]: G.add_path([10,11,12])
您可以使用例如list将生成器转换为子图列表:
In [5]: list(nx.weakly_connected_component_subgraphs(G))
Out[5]:
[<networkx.classes.digraph.DiGraph at 0x278bc10>,
<networkx.classes.digraph.DiGraph at 0x278ba90>]
max运算符采用一个键参数,您可以将其设置为Python函数len
,它在每个子图上调用len(g)来计算节点数。因此,要获得具有最多节点数的组件,您可以编写
In [6]: largest = max(nx.weakly_connected_component_subgraphs(G),key=len)
In [7]: largest.nodes()
Out[7]: [1, 2, 3, 4]
In [8]: largest.edges()
Out[8]: [(1, 2), (2, 3), (3, 4)]