如何从相关有序对(列表)列表中形成集群?请仔细阅读

时间:2016-08-22 11:22:12

标签: python graph

假设我们有一个列表列表, master = [[1,2], [2,5], [3,5], [7,8], [11,8], [11,12]] 其中每个有序对是相关的,意味着 1,2是相关的,因此是2,5 ,它们遵循传递 属性,暗示,{ {1}}属于同一个群集。

问题是我们如何将上述列表聚合成相关元素?

主人的集群将是: 1,2,5

我正在使用Python并根据图表进行思考。效率越高越好。

2 个答案:

答案 0 :(得分:1)

让主列表作为它们之间的点和边的记录。这意味着它们之间有8个点1,2,3,5,7,8,11,12和6个边缘。 以下代码可能会为您提供所需的内容。

import networkx
from networkx.algorithms.components.connected import connected_components

def to_graph(CL, edge):
    G = networkx.Graph()
    for part in CL:
        G.add_nodes_from(part)
        G.add_edges_from(edge)
    return G

master = [[1,2], [2,5], [3,5], [7,8], [11,8], [11,12]]

G = to_graph(master, master)
for se in connected_components(G):
    print list(se)
  

[1,2,3,5]   [8,11,12,7]

您可以直接使用图表

import matplotlib.pyplot as plt

pos = networkx.shell_layout(G)
networkx.draw(G, pos)
plt.show()

enter image description here

答案 1 :(得分:0)

Scipy有一个适合此问题的连接组件实现,请参阅scipy.sparse.csgraph.connected_components