(Python) 배열 정렬

이번 포스팅에서는 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이라는 인수가 주어지면 가로축을 기준으로 정렬합니다.