networkx:将派系分解为唯一边

时间:2018-01-20 20:47:57

标签: python graph networkx clique

我有以下表格的字典

{   0: [1, 2, 3, 4, 5]
    1: [6, 2, 3, 4, 5]
    2: [3, 4, 5, 6, 7]
    3: [8, 9]
    ...
}

每个值(未排序的列表)对应于我想在图表中引发的一个集团。不幸的是,正如你所看到的,许多派系共享的顶点也是其他集团的一部分。现在我直接诱导这些派系:

for clique in clique_dict.itervalues(): 
    graph.add_edges_from(combinations(clique, 2))

但这是很耗时的,因为很多对边缘早已被诱导为其他集团诱导的一部分。是否有更有效的方式来诱导这些集团?也许对这些派系进行一些后期处理?

1 个答案:

答案 0 :(得分:1)

如果您准备了所有唯一边的列表,然后一次性添加它们,您可能会得到一些改进:

edges = set(chain.from_iterable([tuple(sorted(pair)) for pair 
            in combinations(clique, 2)] for clique in clique_dict.values()))
graph.add_edges_from(edges)

添加排序以避免出现反平行边缘,如(2,3)和(3,2)。