넘파이 라이브러리에는 배열을 정렬하는 메서드가 존재합니다.
np.sort()와 np.argsort() 두 가지 함수가 있는데요,
전자는 데이터를 기준으로, 후자는 인덱스를 기준으로 배열을 정렬합니다.
np.sort()
np.sort(a, axis=-1, kind=None, order=None)
arr = np.random.randint(0, 100, (10, ))
print(arr)
# [17 45 67 88 10 82 44 2 55 92]
arr_sort = np.sort(arr)
print(arr_sort)
# [ 2 10 17 44 45 55 67 82 88 92]
np.sort() 메서드는 기본적으로 배열을 오름차순 정렬한 결과를 리턴합니다.
arr = np.random.randint(0, 100, (10, ))
print(arr)
# [60 47 73 62 3 13 97 43 88 75]
arr_sort = np.sort(arr)
print(arr_sort)
# [ 3 13 43 47 60 62 73 75 88 97]
arr_sort_dec = arr_sort[::-1]
print(arr_sort_dec)
# [97 88 75 73 62 60 47 43 13 3]
내림차순으로 정렬해야 하는 경우에는 배열을 슬라이싱 하면 됩니다.
arr = np.random.randint(0, 100, (4, 5))
print(arr)
# [[94 49 95 85 79]
# [88 11 37 97 59]
# [77 73 39 8 16]
# [16 23 32 95 71]]
arr_sort_row = np.sort(arr, axis=0)
print(arr_sort_row)
# [[16 11 32 8 16]
# [77 23 37 85 59]
# [88 49 39 95 71]
# [94 73 95 97 79]]
# 행을 기준으로 내림차순 정렬
arr_sort_row_dec = arr_sort_row[::-1, :]
arr_sort_col = np.sort(arr, axis=1)
print(arr_sort_col)
# [[49 79 85 94 95]
# [11 37 59 88 97]
# [ 8 16 39 73 77]
# [16 23 32 71 95]]
# 열을 기준으로 내림차순 정렬
arr_sort_col_dec = arr_sort_col[:, ::-1]
2차원 배열에 대해서도 정렬이 가능합니다.
이때 매개변수 axis 값을 전달해서 행 또는 열 기준 정렬 여부를 지정할 수 있습니다.
np.argsort()
np.argsort(a, axis=-1, kind=None, order=None)
💡 주요 특징
np.argsort() 메서드의 결과는 np.sort() 메서드가 반환하는 결과값들을 각각의 인덱스로 치환한 것과 동일합니다.
arr = np.random.randint(0, 100, (10, ))
print(arr)
# [17 45 67 88 10 82 44 2 55 92]
arr_sort = np.sort(arr)
print(arr_sort)
# [ 2 10 17 44 45 55 67 82 88 92]
arr_argsort = np.argsort(arr)
print(arr_argsort)
# [7 4 0 6 1 8 2 5 3 9]
np.argsort() 메서드 또한 오름차순 정렬을 하지만 값이 아닌 인덱스 정보를 리턴합니다.
따라서 np.sort() 메서드를 살펴봤던 것처럼 자세하게 다루지는 않겠습니다.
정리를 마치며
국어 | 수학 | 영어 | |
학생 A | 100 | 82 | 96 |
학생 B | 82 | 100 | 100 |
학생 C | 96 | 92 | 94 |
학생 D | 66 | 58 | 100 |
학생 E | 78 | 92 | 96 |
학생들의 과목별 점수를 정리한 데이터셋입니다.
- axis=0 (행을 기준으로 정렬): 과목별 최고(저)점수를 확인할 수 있습니다. np.argsort() 메서드를 사용하면 과목별 최고(저)점수를 받은 학생을 알 수 있습니다.
- axis=1 (열을 기준으로 정렬): 학생별 최고(저)점수를 확인할 수 있습니다. np.argsort() 메서드를 사용하면 학생이 최고(저)점수를 받은 과목을 알 수 있습니다.
이상으로 배열을 정렬하는 np.sort(), np.argsort() 메서드에 대해 알아봤습니다.
딥러닝 데이터셋을 다룰 때 주로 2, 3차원 배열에 대해 정렬을 합니다.
따라서 이번에 정리한 각 정렬 메서드의 동작 방식을 확실하게 익힐 필요가 있어 보입니다.
'파이썬・ML > numpy' 카테고리의 다른 글
넘파이 np.repeat(), np.tile() 배열 반복하기 (0) | 2023.06.16 |
---|---|
넘파이 np.hstack(), np.vstack(), np.concatenate() 배열 합치기 (0) | 2023.06.16 |
넘파이 배열의 차원 다루기 (0) | 2023.06.15 |
넘파이 벡터의 내적과 행렬의 곱셈 (0) | 2023.06.15 |
넘파이 반올림 메서드 알아보기 (0) | 2023.06.14 |