파이썬 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]])
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)