2017-10-19 14 views
0

3D 포인트 쌍 (또는 인덱스 번호)으로 구성된 데이터 세트를 연결된 클러스터로 분할하는 방법이 있습니까? 즉, (a = c, b = c, a = d 또는 b = d) 공통점을 공유하거나 두 개의 쌍 (a, b, c)가 동일한 클러스터에 있어야합니다. 하나 또는 그 이상의 다른 쌍의 체인으로서, 각각은 한 쌍에서 다른 쌍으로 이전 노드와 공통점을 공유합니다. 예를 들어반복 데이터를 통한 클러스터링

쌍 목록 :

[[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를 사용

+2

. '[1,2], [2,3]'이 클러스터에 있다면, 왜 [6,7], [7,8]가 아닌가? "반복되는 포인트"란 무엇을 의미합니까? – roganjosh

+1

@roganjosh 문제는 그래프의 연결된 구성 요소를 찾는 것으로 표현할 수 있다고 생각합니다. 주어진 쌍이 가장자리이고 숫자가 노드입니다. OP, networkx를 확인하십시오. –

+0

@AlexHall 설명은 불행히도 질문에 OP 또는 사용자가 아닌 의견을 추가하는 임의 편집에 의해 도움이되지 않습니다. 그렇더라도 필요한 출력을 연결 그래프의 중단을 식별하고 나머지를 다른 목록으로 덤프하는 것으로 해석해야합니까? '[6,7], [7,8]'은 여전히 ​​연결되어 있지만 나머지 부분에서는 나타납니다. – roganjosh

답변

2

:

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])] 
+0

방금 ​​networkx에 걸렸습니다. 귀하의 실제 사례에 대해 대단히 감사합니다. –