이번 포스팅에서는 Python에서 Numpy 배열을 정렬하는 방법에 대해 알아보겠습니다.
import numpy as np
먼저 numpy 패키지를 가져옵니다.
def selection_sort(x):
for i in range(len(x)):
swap = i + np.argmin(x(i:))
(x(i), x(swap)) = (x(swap), x(i))
return x
기본적으로 선택 정렬 알고리즘을 하드코딩하여 구현할 수 있습니다.
x = np.array((3,9,7,2,6))
selection_sort(x)
array((2, 3, 6, 7, 9))
실제로 실행 결과를 보면 입력으로 입력된 배열이 정렬되어 있는 것을 볼 수 있습니다.
그러나 선택 정렬을 배운 사람이라면 이 알고리즘이 O(N) 계산 과정을 가지고 있다는 것을 알고 있으므로 배열의 길이가 매우 큰 경우에는 적합한 방법이 아닙니다.
Numpy 패키지는 자체 정렬 기능을 제공합니다. 이 경우 기본 알고리즘은 퀵 정렬을 사용합니다.
np.sort(x)
array((2, 3, 6, 7, 9))
이렇게 정렬할 배열을 np.sort 함수에 넣으면 원하는 결과가 출력되는 것을 볼 수 있다.
x.sort()
x
array((2, 3, 6, 7, 9))
x 자체에 대해 정렬 기능을 사용하면 정렬된 결과가 x에 저장됩니다.
지금까지 1차원 배열을 정렬하는 방법을 배웠습니다.
그렇다면 차원이 2개 이상인 배열을 정렬하는 방법은 무엇입니까?
rand = np.random.RandomState(42)
X = rand.randint(0, 10, (4,6))
print(X)
((6 3 7 4 6 9)
(2 6 7 4 3 7)
(7 2 5 4 1 7)
(5 1 4 0 9 5))
크기가 (4,6)인 임의의 배열을 만들었습니다.
np.sort(X, axis = 0)
array(((2, 1, 4, 0, 1, 5),
(5, 2, 5, 4, 3, 7),
(6, 3, 7, 4, 6, 7),
(7, 6, 7, 4, 9, 9)))
np.sort의 축 인수를 사용하여 특정 축에 따라 정렬할 수 있습니다.
축 = 0인 경우 세로 축을 기준으로 정렬됩니다.
np.sort(X, axis = 1)
array(((3, 4, 6, 6, 7, 9),
(2, 3, 4, 6, 7, 7),
(1, 2, 4, 5, 7, 7),
(0, 1, 4, 5, 5, 9)))
반면에 axis=1이라는 인수가 주어지면 가로축을 기준으로 정렬합니다.