完全连接来自networkx中较大图形的子图

时间:2015-03-18 16:22:47

标签: python nodes networkx subgraph

我试过不在这里重新发布,但我认为我的请求非常简单,我对网络图表缺乏经验。在python中使用networkx模块时,我想从连接图中恢复所有节点相互连接的子图(节点数大于2的子图)。有一种简单的方法可以做到这一点吗?

以下是我的例子:

包含七个节点的简单图表。节点1,2,3是共享连接,节点1,2,4都共享连接,节点5,6,7都共享连接。

import networkx as nx
G=nx.Graph() #Make the graph
G.add_nodes_from([1,2,3,4,5,6,7]) #Add nodes, although redundant because of the line below
G.add_edges_from([(1,2),(1,3),(2,3),(1,4),(2,4),(1,5),(5,6),(5,7),(6,7)]) # Adding the edges

我想要的输出是:([1,2,3],[1,2,4],[5,6,7])

我可以想到稍微费力的写作方法,但想知道是否有一个简单的内置功能。<​​/ p>

1 个答案:

答案 0 :(得分:1)

听起来你想要发现图表中的派系。为此,您可以使用nx.clique.find_cliques()

>>> list(nx.clique.find_cliques(G))
[[1, 2, 3], [1, 2, 4], [1, 5], [6, 5, 7]]

nx.clique.find_cliques()返回一个生成器,它将生成图中的所有派系。您可以使用列表推导过滤掉少于三个节点的派系:

>>> [g for g in nx.clique.find_cliques(G) if len(g) > 2]
[[1, 2, 3], [1, 2, 4], [6, 5, 7]]