我想知道我是否可以使用networkx从输入大图中提取子图中具有特定节点数的所有可能的诱导子图(graphlet),或者是否有其他包可以完成这项工作?例如,如果我有一个大图,以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个节点提取graphlet,算法应该返回给我
subgraph1:
1 2 3
2 1
3 1
[(1,2),(1,3)]
subgraph2:
1 3 7
3 1
7 1
[(1,3),(1,7)]
subgraph3:
3 4 5
4 3 5
5 3 4
[(3,4),(3,5),(4,5)]
subgraph4,subgraph5,subgraph6 …
以下是@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,