按重复数据聚类

Clustering by repeated data

有没有办法将由 3D 点对(或只是它们的索引号)组成的数据集拆分成相连的簇?也就是说,如果两对 (a,b) 和 (c,d) 共享一个公共点(即 a = c, b = c, a = d 或 b = d)或者如果有一对或多对其他对的链,从一对到另一对,每一对与前一对共享一个公共点。

例如对列表:

[[1,2],[2,3],[4,5],[6,7],[7,8],[9,4],[8,5]]

将分组如下:

[[1,2],[2,3]]

[[4,5],[6,7],[7,8],[9,4],[8,5]]

在第一个簇中,对 (1,2) 和 (2,3) 具有共同点 2,并且与簇外的任何对不共享任何点。在第二个簇中,对 (4,5) 与 (9,4) 和 (8,5) 共享公共点,而 (8,5) 与 (7,8) 有一个公共点,后者有一个公共点与 (6,7).

数据本来是存储在一个numpy数组中的,但是输出格式不是太重要。

之后我需要能够访问构成每个单独集群的数据。

使用networkx:

import networkx

edges = [[1, 2], [2, 3], [4, 5], [6, 7], [7, 8], [9, 4], [8, 5]]

graph = networkx.Graph(edges)
print(list(networkx.connected_components(graph)))

输出:

[set([1, 2, 3]), set([4, 5, 6, 7, 8, 9])]