1. 기본 정렬 – sort()
NumPy에는 배열을 정렬하는 방식이 두 가지 있습니다:
함수 원본 배열 변경 반환값 특징
np.sort(arr) | 변경 안 됨 | 정렬된 복사본 | 비파괴적 정렬 |
arr.sort() | 변경됨 | None | 원본 배열 정렬 |
예시
import numpy as np
arr = np.array([3, 1, 2])
# np.sort()는 복사본 정렬
print(np.sort(arr)) # [1 2 3]
print(arr) # [3 1 2]
# arr.sort()는 원본 정렬
arr.sort()
print(arr) # [1 2 3]
내림차순 정렬하기
NumPy는 기본적으로 오름차순 정렬을 수행합니다.
내림차순으로 바꾸고 싶다면 [::-1]을 이용하세요.
예시
arr = np.array([3, 1, 2])
# 복사본을 내림차순 정렬
desc1 = np.sort(arr)[::-1]
print(desc1) # [3 2 1]
# 원본을 내림차순 정렬
arr.sort()
arr = arr[::-1]
print(arr) # [3 2 1]
주의: arr = arr.sort() 처럼 쓰면 arr이 None이 됩니다!
np.argsort() – 정렬된 순서의 인덱스 반환
정렬된 값이 아니라 원래 배열에서 어떤 인덱스를 따라가야 정렬되는지를 반환합니다.
예시
arr = np.array([3, 1, 9, 5])
# 정렬된 인덱스만 반환
sorted_idx = np.argsort(arr)
print(sorted_idx) # [1 0 3 2]
# 이 인덱스를 원본 배열에 적용해 정렬
print(arr[sorted_idx]) # [1 3 5 9]
argsort()의 실전 활용
관련 데이터 함께 정렬하기
scores = np.array([70, 100, 85])
names = np.array(["Kim", "Lee", "Park"])
sorted_idx = np.argsort(scores)
print(names[sorted_idx]) # ['Kim' 'Park' 'Lee']
상위 K개 추출 (Top-k)
top3_idx = np.argsort(scores)[-3:]
print(scores[top3_idx]) # [70 85 100]
print(names[top3_idx]) # ['Kim' 'Park' 'Lee']
axis 기준 정렬 (2D 이상)
axis 값 정렬 방향
axis=0 | 세로 방향 (열 단위) |
axis=1 | 가로 방향 (행 단위) |
예시
array2d = np.array([[8, 12],
[7, 1]])
print(np.sort(array2d, axis=0))
# [[7, 1]
# [8, 12]]
print(np.sort(array2d, axis=1))
# [[ 8, 12]
# [ 1, 7]]
axis를 직관적으로 이해하는 법
- 차원이 커질수록 더 복잡한 큐브 형태의 데이터 구조가 만들어집니다.
- axis=0은 세로 방향, axis=1은 가로 방향, axis=2는 깊이(3차원)로 보면 됩니다.
핵심 요약
목적 함수 예시 결과
값을 정렬하고 싶을 때 | np.sort(arr) | 정렬된 배열 반환 |
원본 배열을 정렬하고 싶을 때 | arr.sort() | 배열 자체 변경 |
정렬된 인덱스를 얻고 싶을 때 | np.argsort(arr) | 정렬 순서의 인덱스 |
정렬 순서로 값 얻기 | arr[np.argsort(arr)] | 정렬된 값 |
내림차순 정렬 | np.sort(arr)[::-1] | 반대로 뒤집기 |