파이썬 argsort를 이용한 열 정렬
조회수 1344회
행렬의 두번째 행의 정렬 인덱스를 argsort로 구한 다음에 모든 열을 행을 기준으로 정렬하려고 합니다.
import numpy as np
a = np.array([[22, 3, 6, 9, 12, 15],
[4, 2, 1, 6, 8, 3],
[3, 53, 11, 25, 22],
[4, 17, 32, 21, 9],
[46, 31, 7, 16, 29]])
np.argsort(a[1])
a[:, np.argsort(a[1])]
이런 식으로 진행했는데 안되네요. 어떻게 해결해야 할지 알려주실 분 계신가요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
2d np.array 일 경우에는 질문자의 방법으로 소팅이 되어야 합니다.
안 되었던 이유는, a 를 만들 때 넣었던 2차원 리스트가 크기가 다른 리스트의 리스트였기 때문에, a 가 2d np.array 가 아닌, 파이썬 리스트의 np.array 가 되었던 것이 문제였습니다. (2차원이 아니니까,
,
를 이용한 2차원 인덱싱이 동작하지 않음.)>>> a = np.array([[22, 3, 6, 9, 12, 15], [4, 2, 1, 6, 8, 3], [3, 53, 11, 25, 22], [4, 17, 32, 21, 9], [46, 31, 7, 16, 29]]) >>> a array([list([22, 3, 6, 9, 12, 15]), list([4, 2, 1, 6, 8, 3]), list([3, 53, 11, 25, 22]), list([4, 17, 32, 21, 9]), list([46, 31, 7, 16, 29])], dtype=object) >>> a.shape (5,) >>> lens_of_a = [ len(l) for l in a ] >>> lens_of_a [6, 6, 5, 5, 5] >>> b = np.array([[22, 3, 6, 9, 12, 15], [4, 2, 1, 6, 8, 3], [3, 53, 11, 25, 22], [4, 17, 32, 21, 9], [46, 31, 7, 16, 29]]) >>> b = np.array([[22, 3, 6, 9, 12], [4, 2, 1, 6, 8], [3, 53, 11, 25, 22], [4, 17, 32, 21, 9], [46, 31, 7, 16, 29]]) >>> b array([[22, 3, 6, 9, 12], [ 4, 2, 1, 6, 8], [ 3, 53, 11, 25, 22], [ 4, 17, 32, 21, 9], [46, 31, 7, 16, 29]]) >>> b.shape (5, 5) >>> b[:,np.argsort(b[1])] array([[ 6, 3, 22, 9, 12], [ 1, 2, 4, 6, 8], [11, 53, 3, 25, 22], [32, 17, 4, 21, 9], [ 7, 31, 46, 16, 29]]) >>> b[1].argsort() array([2, 1, 0, 3, 4], dtype=int64) >>> b[:,b[1].argsort()] array([[ 6, 3, 22, 9, 12], [ 1, 2, 4, 6, 8], [11, 53, 3, 25, 22], [32, 17, 4, 21, 9], [ 7, 31, 46, 16, 29]])
댓글 입력