Python/NumPy | Pandas

[Python] NumPy - 배열의 연산 2

비번변경 2022. 11. 21. 19:54

개요

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)

 

 

참고 문서

데이터 사이언스 스쿨 - 3.3 배열의 연산