[NumPy] sort & argsort

|

행렬의 정렬

np.sort( )와 ndarray.sort( )

numpy에서 행렬을 정렬하는 대표적인 방법은 np.sort()ndarray.sort()가 있음. 둘 다 오름차순 정렬이 default이다.

두 방식의 차이는 np.sort()의 경우 원본 행렬은 그대로 유지한 채 원본 행렬의 정렬된 행렬을 반환하며 ndarray.sort()은 원본 행렬 자체를 정렬한 행렬로 반환하며 반환 값은 None이다.

image

내림차순 정렬

내림차순 정렬은 sort 끝에 [::-1]를 붙여준다. np.sort( )[::-1]

image

2차원 행렬 정렬

행렬이 2차원 이상인 경우는 axis 값을 설정하여 정렬이 가능함. axis를 따로 명시하지 않을 경우 정렬이 되지 않음. 2차원 행렬에서 axis=0인 경우는 로우 방향으로 정렬을 한다. 반면, axis=1인 경우 컬럼 방향으로 정렬을 한다.

image

정렬된 행렬의 인덱스 반환하기 np.argsort( )

원본 행렬이 정렬되었을 때 원본 행렬의 원소에 대한 인덱스를 필요로할 때 np.argsort( )를 이용한다. 인덱스는 ndarray형으로 반환됨. 이 역시 내림차순으로 정렬된 행렬의 원본 행렬의 인덱스를 얻고싶을 때 뒤에 [::-1]를 붙여주면 된다.

image

argsort( )는 numpy에서 활용도가 높다고 한다. numpy의 경우 pandas DataFrame 칼럼과 같은 메타 데이터를 가질 수 없으므로 실제 값과 그 값이 뜻하는 메타 데이터를 별도의 ndarray로 각각 가져야만 한다.


예를 들어, 학생 이름과 학생의 성적이 각각 ndarray로 존재한다고 하자. 이를 성적순대로 학생의 이름을 정렬하여 보여주고 싶은 경우 이 argsort를 통해 얻은 fancy index로 표현이 가능하다.

image

Comments