이번 포스팅에서는 Python numpy 배열을 정렬(array sorting)하는 방법에 대해서 소개하겠습니다.
- (1) 1차원 배열 정렬 : np.sort(x)
- (2) 1차원 배열 거꾸로 정렬 : np.sort(x)[::-1] , x[np.argsort(-x)]
- (3) 2차원 배열 열 축 기준으로 정렬 : np.sort(x, axis=1)
- (4) 2차원 배열 행 축 기준으로 정렬 : np.sort(x, axis=0)
- (5) 2차원 배열 행 축 기준으로 거꾸로 정렬 : np.sort(x, axis=0)[::-1]
[ Python Numpy 배열 정렬: np.sort() ]
(1) 1차원 배열 정렬 : np.sort(x) |
In [1]: import numpy as np In [2]: x = np.array([4, 2, 6, 5, 1, 3, 0]) In [3]: np.sort(x) Out[3]: array([0, 1, 2, 3, 4, 5, 6])
|
참고로, np.sort(x) 메소드는 원래의 배열은 그대로 둔채로 정렬이 된 결과를 복사본으로 반환합니다.
반면에 x.sort() 메소드는 원래의 배열 자체를 정렬합니다.
np.sort(x) => 원래 배열은 그래로, 정렬 결과 복사본 반환 |
x.sort() => 배열 자체를 정렬 |
In [2]: x = np.array([4, 2, 6, 5, 1, 3, 0]) In [3]: np.sort(x) Out[3]: array([0, 1, 2, 3, 4, 5, 6]) In [4]: x Out[4]: array([4, 2, 6, 5, 1, 3, 0])
|
In [5]: x = np.array([4, 2, 6, 5, 1, 3, 0]) ...: In [6]: x.sort() In [7]: x Out[7]: array([0, 1, 2, 3, 4, 5, 6]) |
(2) 1차원 배열 거꾸로 정렬 : np.sort(x)[::-1] , x[np.argsort(-x)] |
배열을 거꾸로 정렬하는 방법에는 2가지가 있습니다.
(2-1) np.sort(x)[::-1] : 정렬을 한 후 mirror view 생성
In [8]: x = np.array([4, 2, 6, 5, 1, 3, 0]) In [9]: x_reverse_1 = np.sort(x)[::-1] # mirror view In [10]: x_reverse_1 Out[10]: array([6, 5, 4, 3, 2, 1, 0])
|
(2-2) x[np.argsort(-x)] : np.argsort() 로 index를 받아서 indexing 해오기
In [11]: x = np.array([4, 2, 6, 5, 1, 3, 0]) In [12]: x_reverse_2 = x[np.argsort(-x)] # copy of reversed sorting In [13]: x_reverse_2 Out[13]: array([6, 5, 4, 3, 2, 1, 0])
|
(3) 2차원 배열 열 축 기준으로 정렬 (from left to right) : np.sort(x, axis=1) |
'axis = 1' 옵션을 주면 열 축을 기준으로, 좌에서 우로 (from left to right) 정렬을 합니다.
이게 좀 헷갈릴 수 있는데요, 아래 예제로 확인해 보시기 바랍니다.
In [14]: x2 = np.array([[2, 1, 6], ...: [0, 7, 4], ...: [5, 3, 2]]) In [15]: x2_sort_axis_1 = np.sort(x2, axis=1) # default In [16]: x2_sort_axis_1 Out[16]: array([[1, 2, 6], [0, 4, 7],
[2, 3, 5]])
|
(4) 2차원 배열 행 축 기준으로 정렬 (from top to bottom) : np.sort(x, axis=0) |
In [17]: x2 = np.array([[2, 1, 6], ...: [0, 7, 4], ...: [5, 3, 2]]) In [18]: x2_sort_axis_0 = np.sort(x2, axis=0) In [19]: x2_sort_axis_0 Out[19]: array([[0, 1, 2], [2, 3, 4],
[5, 7, 6]])
|
(5) 2차원 배열 열 축 기준으로 거꾸로 정렬 (from bottom to top, reversely) : np.sort(x, axis=1)[::-1] |
In [20]: x2 = np.array([[2, 1, 6], ...: [0, 7, 4], ...: [5, 3, 2]]) In [21]: x2_sort_axis_0_reverse = np.sort(x2, axis=0)[::-1] In [22]: x2_sort_axis_0_reverse Out[22]: array([[5, 7, 6], [2, 3, 4],
[0, 1, 2]])
|
참고로 Python
- (1) DataFrame 정렬 : DataFrame.sort_values()
- (2) Tuple 정렬 : sorted(tuple, key)
- (3) List 정렬 : list.sort(), sorted(list)
은 http://rfriend.tistory.com/281 을 참고하시기 바랍니다.
사전 자료형(Dictionary)의 키, 값 기준 정렬은 https://rfriend.tistory.com/473 를 참고하세요.
데이터 형태마다 정렬 함수, 메소드가 조금씩 달라서 매번 헷갈리곤 합니다. ㅜ_ㅜ
많은 도움 되었기를 바랍니다.