본문 바로가기

데이터 다루기/Python

[Python] Array 정렬 (Sorting)

728x90
반응형

이번 포스팅에서는 Python에서 Numpy Array (배열)에 대해서 정렬을 배워보도록 하겠습니다.

 

import numpy as np

가장 먼저 numpy 패키지는 import 하였습니다.

 

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

우리는 기본적으로 선택 정렬 알고리즘을 Hard Coding하여 구현할 수 있습니다.

 

x = np.array([3,9,7,2,6])
selection_sort(x)

array([2, 3, 6, 7, 9])

 

실제로 실행 결과를 보시면, Input으로 들어간 배열이 정렬되어 나타나는 것을 확인할 수 있습니다.

 

하지만 선택 정렬을 배워본 사람은 알테지만, 해당 알고리즘은 O(N)의 계산 과정을 가지기 때문에, 배열의 길이가 매우 클 경우에는 적합한 방법은 아니다.

 

Numpy 패키지에서는 자체적으로 Sorting 함수를 제공한다. 이 때, 기본적인 알고리즘은 퀵 정렬을 사용한다.

 

np.sort(x)

array([2, 3, 6, 7, 9])

 

이 처럼 np.sort 함수 안에 정렬하고자 하는 배열을 넣어주면, 원하는 결과가 출력되는 것을 확인할 수 있다.

 

x.sort()
x

array([2, 3, 6, 7, 9])

 

x 자체에 sort 함수를 사용해주면, 정렬된 결과가 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에 axis 파라미터를 활용하면, 특정 축을 기준으로 정렬을 할 수 있습니다.

axis = 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 의 파라미터를 주면 가로축을 기준으로 정렬이 됩니다.

 

반응형

'데이터 다루기 > Python' 카테고리의 다른 글

[Python] Pandas Series 객체  (1) 2023.05.30
[Python] Array 합치기  (0) 2023.03.27
[Python] Array 만들기  (0) 2023.03.16
[Python] Numpy란?  (0) 2023.03.15
[Python] 에러 및 디버깅  (0) 2023.02.15