【发布时间】:2014-04-06 11:41:39
【问题描述】:
我想知道是否可以使用 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,算法应该返回我
子图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)]
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, 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)]
【问题讨论】:
-
你的意思是非同构诱导子图吗?为什么不在 3 4 5 上三角形?
-
@hivert Graphlets 对我来说也是一个新名词。维基百科说它们是“......大型网络的小型连接非同构诱导子图。”
-
@Hooked : triangle 3 4 5 is 已连接。
-
@hivert 对不起,我不清楚,如果 OP 表示非同构诱导子图但试图解释“graphlet”的含义,我正在回答您的问题。是的 3,4,5 是连接的,是的,如果我理解这个问题,我认为应该包括它。
-
@Hooked :由于连接这个词没有出现在问题的任何地方,我不确定 OP 是否也是这个意思!
标签: python graph extract networkx subgraph