我想知道是否可以使用networkx从一个输入的大型图中提取出特定节点数的引出子图(graphlets),或者是否有其他软件包可以完成这个任务?例如,如果我有一个用networkx邻接表格式表示的大型图,
图G:
1 2 3 7
2 1 4
3 1 4 6 5
4 2 3 5
5 3 4 6
6 3 5 7
7 1 6
它将会看起来像这样:
如果我想要提取包含3个节点的图形子集,那么算法应该返回给我:
子图1:
1 2 3
2 1
3 1
[(1,2),(1,3)]
子图2:1 3 7
3 1
7 1
[(1,3),(1,7)] 子图3:
3 4 5
4 3 5
5 3 4
[(3,4),(3,5),(4,5)]
子图4、子图5、子图6...
以下是由@Hooked建议的问题的代码。 假设n=3。
import itertools
target = nx.complete_graph(3)
for sub_nodes in itertools.combinations(g.nodes(),len(target.nodes())):
subg = g.subgraph(sub_nodes)
if nx.is_connected(subg):
print subg.edges()
输出结果将如下所示
[(1, 2), (1, 3)]
[(1, 2), (2, 4)]
[(1, 2), (1, 7)]
[(1, 3), (3, 4)]
[(1, 3), (3, 5)]
[(1, 3), (3, 6)]
[(1, 3), (1, 7)]
[(1, 7), (6, 7)]
[(2, 4), (3, 4)]
[(2, 4), (4, 5)]
[(3, 4), (3, 5), (4, 5)]
[(3, 4), (3, 6)]
[(3, 5), (3, 6), (5, 6)]
[(3, 6), (6, 7)]
[(4, 5), (5, 6)]
[(5, 6), (6, 7)]