我有一本字典,格式如下

{   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))

但这是很耗时的,因为许多对边已经作为其他团归纳的一部分提前被归纳出来了。有没有更有效的方法来诱导这些集团?也许是对这些集团的一些事后处理?

最佳答案

如果您准备一个所有唯一边的列表,然后一次将它们全部添加,则可能会得到一些轻微的改进:

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)这样的反平行边。

关于python - networkx:将集团分解为独特的优势,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48360952/

10-11 04:37