2차원 파이선 내부의 1차원 행렬 조작
조회수 1436회
다름이 아니라 파이선으로 클러스터링 하는 코드를 짜고 있습니다.
일단 초기 데이터가
a=[1,2,13,14,16,25,54,68,88,94,101,110,114,122,132,165,170]
이렇게 보여진다고 가정하고 군집화 코드를 작성하였습니다.
군집화 코드는 데이터 행렬과 최대 거리를 파라미터로 받아,
먼약 최대 거리 허용가능한 최대거리가 10이라 가정하면,
두 원소사이 거리가 10 이하일경우, 같은 array에 속하게 코딩을 했습니다.
위 예시의 결과는 다음과 같은 2차원 array로 표시됩니다.
[[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]]
여기서 제가 하고자 하는것은
[54], [68]와 같은 길이가 1인 내부의 데이터를 제거하여
다음과 같은 결과를 얻고자 합니다
[[1,2],[13,14,16,25],[88,94,101,110,114,122,132],[165,170]]
이렇게 할려면 대충 a.pop을 써야겠다는 생각은 드는데..;
원하는 결과는 나오질 않습니다.
th = 10
g=[[a[0]]]
for i in a[1:] :
if abs(i - g[-1][-1]) <= th:
g[-1].append(i)
else:
g.append([i])
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
원소 길이가 1개 이상인 리스트만 모아두는 새로운 리스트를 만드세요.
clustered = [[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]] removed = [] for ls in clustered: if len(ls) > 1: removed.append(ls) # removed = [[1, 2], [13, 14, 16, 25], [88, 94, 101, 110, 114, 122, 132], [165, 170]]
clustered = [[1,2],[13,14,16,25],[54],[68],[88,94,101,110,114,122,132],[165,170]] removed = [ls for ls in clustered if len(ls) > 1] # removed = [[1, 2], [13, 14, 16, 25], [88, 94, 101, 110, 114, 122, 132], [165, 170]]
-
(•́ ✖ •̀)
알 수 없는 사용자 -
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
-
댓글 입력