sort(): 행렬 정렬argsort(): 정렬된 행렬의 인덱스 반환
예시 배열
arr = np.array([3, 10, 5, -4, -9, 6])
np.sort() 적용시 오름차순으로 정렬된다.sort_arr = np.sort(arr)
sort_arr
- 출력
array([-9, -4, 3, 5, 6, 10])
arr.sort() 적용시 원본 배열이 sort() 가 적용된 상태로 변경된다.arr.sort()
arr
- 출력
array([-9, -4, 3, 5, 6, 10])
sort() 한 배열을 역순으로 출력한다.np.sort(arr)[::-1]
- 출력
array([10, 6, 5, 3, -4, -9])
예시 배열
arr2 = np.array([[8, 12, 5],
[4, 2, 7]])
axis 미설정시 기본값 -1 로 행 기준 정렬한다.np.sort(arr2)
- 출력
array([[ 5, 8, 12],
[ 2, 4, 7]])
axis=0 설정시 열 기준 정렬한다.np.sort(arr2, axis=0)
- 출력
array([[ 4, 2, 5],
[ 8, 12, 7]])
axis=None 설정시 배열이 Flattened 되고, 그 후 정렬된다.np.sort(arr2, axis=None)
- 출력
array([ 2, 4, 5, 7, 8, 12])
예시 배열
dtype = [('name', 'S10'), ('height', float), ('age', int)]
values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38), ('Galahad', 1.7, 38)]
struct_arr = np.array(values, dtype=dtype)
struct_arr
- 출력
array([(b'Arthur', 1.8, 41), (b'Lancelot', 1.9, 38),
(b'Galahad', 1.7, 38)],
dtype=[('name', 'S10'), ('height', '<f8'), ('age', '<i8')])
sort() 적용시 맨 앞의 name 기준으로 정렬된다.np.sort(struct_arr)
- 출력
array([(b'Arthur', 1.8, 41), (b'Galahad', 1.7, 38),
(b'Lancelot', 1.9, 38)],
dtype=[('name', 'S10'), ('height', '<f8'), ('age', '<i8')])
order= 적용시 해당 데이터 기준으로 정렬된다.age 기준으로 정렬된 모습np.sort(struct_arr, order='age')
- 출력
array([(b'Galahad', 1.7, 38), (b'Lancelot', 1.9, 38),
(b'Arthur', 1.8, 41)],
dtype=[('name', 'S10'), ('height', '<f8'), ('age', '<i8')])
order 기준에 리스트 형태로 적용하여 정렬 우선순위를 설정할 수 있다.age 1순위 정렬 후 age 가 같은 두 데이터에서 height 로 정렬된 것을 볼 수 있다.np.sort(struct_arr, order=['age', 'height'])
- 출력
array([(b'Galahad', 1.7, 38), (b'Lancelot', 1.9, 38),
(b'Arthur', 1.8, 41)],
dtype=[('name', 'S10'), ('height', '<f8'), ('age', '<i8')])
예시 배열
arr = np.array([ 3, 10, 5, -4, -9, 6])
배열 정렬
np.sort(arr)
- 출력
array([-9, -4, 3, 5, 6, 10])
-9 는 원본 배열에서 인덱스 4 에 위치하기에 4 를 반환한다.sort_idx = np.argsort(arr)
sort_idx
- 출력
array([4, 3, 0, 2, 5, 1])
원본 배열 출력
arr[sort_idx]
- 출력
array([-9, -4, 3, 5, 6, 10])
예시 배열
arr2 = array([[ 8, 12, 5],
[ 4, 2, 7]])
열 기준 정렬
np.sort(arr2, axis=0)
- 출력
array([[ 4, 2, 5],
[ 8, 12, 7]])
(4, 8) 에서 4 는 원본 배열 (8, 4) 에서 인덱스 1 에 위치하고, 8 은 인덱스 0 에 위치 하기에 (1, 0) 가 된다.np.argsort(arr2, axis=0)
- 출력
array([[1, 1, 0],
[0, 0, 1]])
행 기준 정렬
np.sort(arr2, axis=1)
- 출력
array([[ 5, 8, 12],
[ 2, 4, 7]])
(5, 8, 12) 에서 5 는 원본 배열 (8, 12, 5) 에서 인덱스 2 에 위치하므로 2 를 반환한다.np.argsort(arr2, axis=1)
- 출력
array([[2, 0, 1],
[1, 0, 2]])
names 와 scores 가 연결된 데이터라 할때, 각각의 데이터를 기준으로 정렬할 수 있다.names = np.array(['Beomwoo1','Beomwoo2','Kim','Joan','Lee','Beomwoo3', 'Park','Beomwoo4'])
scores = np.array([50, 70, 100, 60, 82, 90, 85, 80])
score 기준 정렬
sort_idx = np.argsort(scores)
sort_idx
- 출력
array([0, 3, 1, 7, 4, 6, 5, 2])
정렬한 score 에 해당하는 name 출력
names[sort_idx]
- 출력
array(['Beomwoo1', 'Joan', 'Beomwoo2', 'Beomwoo4', 'Lee', 'Park', 'Beomwoo3', 'Kim'],
dtype='<U8')
names 기준 정렬 후 scores 출력
scores[np.argsort(names)]
- 출력
array([ 50, 70, 90, 80, 60, 100, 82, 85])