본문 바로가기

컴퓨터공학/python

[Numpy] Sorting에 대하여(sort,argsort) 정렬, 인덱스정렬

이번 글에서는 Sorting에 대해서 자세히 알아보도록 하겠습니다.

 

Index


1.Sorting Vectors

2.Sorting Matrix


들어가기에 앞서

Sorting이란 ? 

원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 것입니다.

방대한 무작위 Dataset이 주어진 경우 순위를 매길때 그리고 순위별 인덱스를 찾아야할때 필수적인 기능입니다.

 

1.Sorting Vectors

numpy.sort(a, axis=-1 , kind=None, order=None)

원소를 오름차순(기본값)으로 정렬해주는 API입니다.

 

numpy.argsort(a, axis=-1, kind=None, order=None)

원소의 인덱스를 알려주는 API입니다.

 

예시를 들어 간단히 알아보도록 하겠습니다.

import numpy as np

x = np.random.randint(0,100,(10,))
1.
sort_ = np.sort(x)
2.
argsort_= np.argsort(x)
3.
argsort_sort_= np.argsort(sort_)
4.
sort_reverse = np.sort(x)[::-1]
5.
argsort_reverse = np.argsort(x)[::-1]
6.
top3_x= np.sort(x)[::-1][:3]
7.
top3_indices = np.argsort(x)[::-1][:3]



>>>print(x)
[30 40 22 42 45 75 15 49 31 85]

1.
>>>print(sort_)
[15 22 30 31 40 42 45 49 75 85]

2.
>>>print(argsort_)
[6 2 0 8 1 3 4 7 5 9]

3.
>>>print(argsort_sort_)
[0 1 2 3 4 5 6 7 8 9]

4.
>>>print(sort_reverse)
[85 75 49 45 42 40 31 30 22 15]

5.
>>>print(argsort_reverse)
[9 5 7 4 3 1 8 0 2 6]
6.
>>>print(top3_x)
[85 75 49]
7.
>>>print(top3_indices)
[9 5 7]

1. sort를 사용할 경우 x값이 오름차순으로 정렬됩니다.

2. argsort를 사용할 경우 sorting된 x값의 index를 알려줍니다.

3. sorting된 값을 argsort할 경우 오름차순으로 index가 나오는것을 확인할 수 있었습니다.

4.indexing을 이용하여 차순을 변경할 수 있습니다.

5.위와 같은 방법으로 인덱스정렬을 반대로 변경할 수 있었습니다.

6. , 7. indexing을 통한 top3를 추출하고 index 정렬을 한 모습입니다.

 

2.Sorting Matrix

matrix에서 sorting은 복잡해 지지만 활용 범위가 늘어나게 됩니다.

axis 설정을 통해 정렬하고 싶은 축을 설정할 수 있고 인덱싱을 이용하여 정렬하여 원하는 부분만 추출할 수도 있습니다.

예시를 통해 알아보도록 하겠습니다.

import numpy as np
a= np.random.randint(0,100,(4,5))

1.
sort_a = np.sort(a,axis=0)
2.
argsort_a = np.argsort(a,axis=0)
3.
argsort_a_col = np.argsort(a,axis=0)[:,1:2]
4.
argsort_a_reverse = np.argsort(a,axis=0)[:,::-1]

print(a)
1.
>>>print(sort_a)
[[49 66 49 91 34]
 [88 97 75 28  4]
 [26 48 70 49 42]
 [91 50 97 49 11]]
[[26 48 49 28  4]
 [49 50 70 49 11]
 [88 66 75 49 34]
 [91 97 97 91 42]]
2.
>>>print(argsort_a)
[[2 2 0 1 1]
 [0 3 2 2 3]
 [1 0 1 3 0]
 [3 1 3 0 2]]

3.
>>>print(argsort_a_col)
[[2]
 [3]
 [0]
 [1]]

4.
>>>print(argsort_a_reverse)
[[1 1 0 2 2]
 [3 2 2 3 0]
 [0 3 1 0 1]
 [2 0 3 1 3]]