[python] numpy sum으로 axis 연산 정리(1): 1,2차원



python numpy 연산에 사용되는 axis 구조를 알아보는 글이며, 틀린 내용은 댓글 부탁드립니다.

python axis 개념이 안잡히신 분은 아래의 글을 먼저 보고 와주세요.
numpy axis 기본 구조



sum을 통해 numpy에서 axis를 연산이 어떻게 사용되는지 알아보겠습니다.


sum함수를 간단하게 살펴보자면 parameter 'a'에 numpy array를 넣어 요소의 합을 내는 함수입니다.
이 때 axis를 어떻게 두냐에 따라 sum을 하는 방법이 달라집니다.

axis None: 몇 차원 배열이든 간 모든 요소의 합을 도출합니다.
axis 0: 0을 기준으로 요소의 합을 도출합니다.
axis 1: 1을 기준으로 요소의 합을 도출합니다.
axis 2: 2을 기준으로 요소의 합을 도출합니다.

1. 1차원에서 sum

1차원 배열에서 axis를 0으로 설정하면 '행'을 기준으로 요소의 합을 도출합니다.
그림으로 보면 아래와 같습니다.

axis 0 방향 배열에 접근한 뒤

합산하면 1 + 2+ 3 + 4의 총합인 10이 도출됩니다.
import numpy as np 

arr = np.array([1, 2, 3, 4]) 
arr_sum0 = np.sum(arr, axis=0
print('arr: ', arr) 
print('arr_sum0: ', arr_sum0)

# 출력
# arr:  [1 2 3 4]
# arr_sum0:  10


2. 2차원에서 sum

2-1. axis None

axis를 'None'으로 설정하면 모든 요소의 값을 '합산'한 값을 출력합니다.
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr_sum = np.sum(arr, axis=None)
print('arr: ', arr)
print('arr_sum: ', arr_sum)

# 출력
# arr:  [[1 2 3 4]
#       [5 6 7 8]]
# arr_sum:  36

2-2. axis 0

axis '0'으로 설정하면 '행'을 기준으로 요소의 합을 도출합니다.
현재 2차원 배열의 구조는 아래의 그림처럼 표현할 수 있기 때문에

sum은 axis 0의 값을 '합산'하여 axis 0이 제거된 '1차원 배열 값'을 새롭게 반환합니다.

(2, 4) shape 데이터 sum 결과는 axis 0(행)이 제거된 (4, ) shape의 1차원 배열이 반환되는 걸 확인할 수 있습니다.
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr_sum0 = np.sum(arr, axis=0)

print('arr.shape: ', arr.shape)
print('arr: ', arr)
print('arr_sum0.shape: ', arr_sum0.shape)
print('arr_sum0: ', arr_sum0)

# 출력
# arr.shape:  (2, 4)
# arr:  [[1 2 3 4]
#       [5 6 7 8]]
# arr_sum0.shape:  (4,)
# arr_sum0:  [ 6  8 10 12]

2-2. axis 1

axis '1'로 설정하면 '열'을 기준으로 요소의 합을 도출합니다.
그림으로 보면 아래와 같습니다.

sum은 axis 1의 값을 '합산'하여 axis 1이 제거된 '1차원 배열 값'을 새롭게 반환합니다.

(2, 4) shape 데이터 sum 결과는 axis 1(열)이 제거된 (2, ) shape의 1차원 배열이 반환되는 걸 확인할 수 있습니다.
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr_sum1 = np.sum(arr, axis=1)

print('arr.shape: ', arr.shape)
print('arr: ', arr)
print('arr_sum1.shape: ', arr_sum1.shape)
print('arr_sum1: ', arr_sum1)

# 출력
# arr.shape:  (2, 4)
# arr:  [[1 2 3 4]
#       [5 6 7 8]]
# arr_sum1.shape:  (2,)
# arr_sum1:  [10 26]

이렇게 axis의 구조를 알아봤습니다.
3차원은 다음 글에서 알아보겠습니다.

이해가 안가거나 잘못된 정보는 댓글 부탁드립니다.

참고문헌

[1] https://www.pythoninformer.com/python-libraries/numpy/index-and-slice/ [2] https://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html
[3] http://taewan.kim/post/numpy_sum_axis/

댓글

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)

[python] selenium close와 quit 차이점