개요
2022.11.19 - [Python] NumPy - 배열의 연산 1에 이어 배열의 연산 관련된 부분을 마저 정리한다.
차원 축소 연산
행렬에서 하나의 행에 있는 원소를 하나의 데이터 집합으로 보고 최댓값 또는 최솟값, 평균값 등을 구하면 결괏값으로 각 행에 대한 하나의 숫자, 1차원 벡터가 구해진다. 이러한 연산을 차원 축소(dimension reduction) 연산이라고 한다.
NumPy는 다음과 같은 차원 축소 연산 함수를 지원한다.
- min/max : 배열의 최소값/최대값
x = np.arange(5)
x.min(), x.max()
# 실행 결과
(0, 4)
- argmin, argmax : 배열의 최솟값/최댓값의 위치
x = np.array([4, 2, -1, 3])
x.argmin(), x.argmax()
# 실행 결과
(2, 0)
- sum : 배열 원소의 총합
x = np.arange(5)
x.sum()
# 실행 결과
10
- mean/median : 산술 평균(arithmetic mean) / 중앙값
x = np.arange(5)
x.mean(), np.median(x)
# 실행 결과
(2.0, 2.0)
- all / any : 배열의 모든 원소가 참인지 / 배열의 원소 중 하나라도 참인지
np.all([True, True, False])
np.any([True, True, False])
# 실행 결과
False
True
연산 대상이 다차원인 경우 어느 차원으로 계산할지 axis 인수로 지정할 수 있다. 0인 경우에는 열, 1인 경우에는 행 연산이며 기본값은 0이다.
x = np.array([[1, 1], [2, 2]])
x.sum(axis=1)
# 실행 결과
array([2, 4])
정렬
sort 함수를 사용하면 배열의 원소를 크기에 따라 정렬할 수 있다. 2차원 이상인 경우에는 행/열을 각각 정렬하는데 axis 인수를 이용해 행을 따로따로 정렬(axis=0)하는지, 열을 따로따로 정렬(axis=1)인지 지정할 수 있다. 기본값은 -1로, 가장 안쪽 차원을 뜻한다.
a = np.array([[4, 3, 5, 7],
[1, 12, 11, 9],
[2, 15, 1, 14]])
np.sort(a) # axis=-1 또는 axis=1 과 동일
np.sort(a, axis=0)
# 실행 결과
array([[ 3, 4, 5, 7],
[ 1, 9, 11, 12],
[ 1, 2, 14, 15]])
array([[ 1, 3, 1, 7],
[ 2, 12, 5, 9],
[ 4, 15, 11, 14]])
sort는 자료 자체가 변하기 때문에 사용 시 주의해야 하며, 자료를 실제로 정렬하는 것이 아니라 순서만 알고 싶다면 argsort를 사용하도록 한다.
a = np.array([42, 38, 12, 25])
np.argsort(a)
# 실행 결과
array([2, 3, 1, 0], dtype=int64)
참고 문서