
Numpy에서 지원하는 sorting method(or function)은
Numpy의 특성상 같은 데이터타입의 array이므로,
Python에서 제공하는 built-in function들보다 효율성이 높음.
관련 gist
https://gist.github.com/dsaint31x/4126817bbc2324e7e9bc6fb49b6ed44f
np_sorting.ipynb
np_sorting.ipynb. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
copy based sorting
컴퓨팅 자원이 충분하다면, 개인적으로 아래와 같이 copy를 반환하는 게 가장 편하다.
import numpy as np
x = np.array([3,4,1,2,5,7,6])
y = np.sort(x) # return a sorted copy of x
print(y)
결과는 다음과 같음.
[1 2 3 4 5 6 7]
역순 정렬은 다음과 같이 처리
import numpy as np
x = np.array([3,4,1,2,5,7,6])
y = np.sort(x)[::-1]
print(y)
결과는 다음과 같음.
[7 6 5 4 3 2 1]
In-place sorting: view를 이용한
하지만, NumPy의 경우 큰 크기의 array를 다루어야 하므로
in-place 처리가 나을 수도 있음.
import numpy as np
x = np.array([3,4,1,2,5,7,6])
y = x.sort() # in-place sort. it returns None (y=None)
print(y)
여기서, y는 None이며, 실제 x가 정렬이 됨.
[1 2 3 4 5 6 7]
역순정렬은 다음과 같음.
import numpy as np
x = np.array([3,4,1,2,5,7,6])
x[::-1].sort()
print(x)
결과는 다음과 같음.
[7 6 5 4 3 2 1]
index 관련 정렬
실제 sort의 결과를 index로 처리하도록 해주는 argsort의 활용도 자주 있으므로 익혀두는게 좋음.
(argmax처럼 index에 대한 처리임.)
import numpy as np
x = np.array([3,4,1,2,5,7,6])
idx = x.argsort() # it will be used by fancy indexing
print(idx)
idx는 다음과 같이 정렬(sorting)이 x의 index로 결과가 나옴. 인덱스가 2에서 가장 작은 값인 1을 가지므로, 2가 가장 앞에 위치함.
[2 3 0 1 4 6 5]
fancy indexing과 같이 sorting된 index의 array를 다음과 같이 사용됨.
print(x[idx])
결과는 다음과 같음.
[1 2 3 4 5 6]
역순으로 정렬하는 것은 다음과 같음.
import numpy as np
x = np.array([3,4,1,2,5,7,6])
y = np.argsort(x)[::-1]
print(y)
결과는 다음과 같음
[5 6 4 1 0 3 2]
같이보면 좋은 자료들
[Summary] NumPy(Numerical Python)
파이썬 생태계에서 과학적 계산의 기본이 되는 라이브러리 NumPy는 파이썬에서 과학 계산과 수치 연산을 효율적으로 처리하기 위한 라이브러리 n-dimensional array(다차원 배열)인 ndarray 객체를 중
ds31x.tistory.com
2023.03.29 - [Programming] - [NumPy] searchsorted
[NumPy] searchsorted
np.searchsorted sort가 된 기존의 ndarray A 에 대해,입력으로 주어지는 ndarray B 의 element들의 값을 보고기존의 ndarray A 의 어느 index에 놓이게 될지를 반환한다.반환되는 ndarray의 shape는 query에 해당하는 B
dsaint31.tistory.com
'Programming' 카테고리의 다른 글
| [CE] Introduction of WSL (old) (0) | 2022.12.22 |
|---|---|
| openCV : cv2.waitKey bug (2) | 2022.10.21 |
| Paradigm (패러다임) (0) | 2022.07.21 |
| [Python] 현재 사용 중인 Python 및 패키지의 실제 경로 확인하기. (2) | 2022.07.18 |
| [Error: Tensorboard] ImportError: cannot import name 'Mapping' from 'collections' (1) | 2022.05.18 |
