有没有办法将包含三对点(或只是它们的索引号)的数据集拆分成连接的集群?也就是说,如果两对(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数组中,但输出格式并不太重要。
之后我需要能够访问构成每个群集的数据。
答案 0 :(得分:2)
使用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])]