numpy.argsort(), 배열 정렬

Python numpy에서 numpy.argsort()를 이용하여 배열을 정렬할 수 있습니다.

다양한 예제와 함께 알아보겠습니다.

1. 오름차순으로 배열 정렬

numpy.argsort(arr)은 배열 arr을 정리하고 정렬된 Index 배열을 리턴합니다.

  • Index 배열은, 정렬된 배열의 값이 실제 배열에서 위치하고 있는 Index를 의미
  • arr[sorted_index]는 오름차순으로 정렬된 배열 리턴
import numpy as np

arr = np.array([3, 1, 4, 2, 5])

sorted_index = np.argsort(arr)
sorted_arr = arr[sorted_index]

print("arr:", sorted_arr)
print("index:", sorted_index)

위 코드 실행 결과를 보면, 정렬된 배열의 0번 Index는 1이고, 1은 실제 배열에서 Index 1에 위치해있습니다. 따라서 Index 배열에서 Index 0은 1의 값을 갖게 됩니다.

arr: [1 2 3 4 5]
index: [1 3 0 2 4]

2. 내림차순으로 배열 정렬

오름차순으로 정렬된 배열에 [::-1]를 사용하여 순서를 뒤집으면 내림차순으로 정렬된 배열을 얻을 수 있습니다.

import numpy as np

arr = np.array([3, 1, 4, 2, 5])

sorted_index = np.argsort(arr)
sorted_arr = arr[sorted_index]
reversed_arr = sorted_arr[::-1]

print("reversed arr:", reversed_arr)

Output:

reversed arr: [5 4 3 2 1]

3. dtype 데이터 정렬

dtype으로 정의된 객체의 배열도 argsort()로 정렬할 수 있습니다.

아래 예제에서 name-age 쌍을 dtype으로 정의하였습니다. 4개 데이터가 있는 배열을 argsort()로 정렬하는데, order=('age', 'name')은 age를 우선으로 정렬하고, age가 동일하면 name으로 정렬하라는 의미입니다.

import numpy as np

dt = np.dtype([('name', 'S10'), ('age', int)])
arr = np.array([('Alice', 25), ('Bob', 30), ('Charlie', 30), ('David', 35)], dtype=dt)

sorted_index = np.argsort(arr, order=('age', 'name'))
sorted_arr = arr[sorted_index]

print(sorted_arr)

Output:

[(b'Alice', 25) (b'Bob', 30) (b'Charlie', 30) (b'David', 35)]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha