[python] numpy sum으로 axis 연산 정리(2): 3차원
python numpy 연산에 사용되는 axis 구조를 알아보는 글이며, 틀린 내용은 댓글 부탁드립니다.
이전 글을 보지 않으신 분은 아래의 글을 먼저 보고 와주세요.
python numpy sum으로 axis 연산 정리(1)
numpy sum을 통해 3차원 배열에서 axis 연산이 어떻게 사용되는지 알아보겠습니다.
3차원에서 sum
1. axis None
axis를 'None'으로 설정하면 모든 요소의 값을 '합산'한 값을 출력합니다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8]],
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum = np.sum(arr, axis=None)
print('sum axis None: ', arr_sum)
# 출력
# sum axis None: 300
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum = np.sum(arr, axis=None)
print('sum axis None: ', arr_sum)
# 출력
# sum axis None: 300
2. axis 0
axis '0'으로 설정하면 'depth'을 기준으로 요소의 합을 도출합니다.※ axis 0이 왜 'depth'인지 모르시는 분은 numpy axis 기본구조 글을 먼저 읽고 와주세요.
현재 3차원 배열의 구조는 아래의 그림처럼 표현할 수 있기 때문에
sum은 axis 0의 값을 '합산'하여 axis 0이 제거된 '2차원 배열 값'을 새롭게 반환합니다.
(3, 2, 4) shape 데이터 sum 결과는 axis 0(depth)이 제거된 (2, 4) shape의 2차원 배열이 반환되는 걸 확인할 수 있습니다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8]],
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum0 = np.sum(arr, axis=0)
print('arr.shape: ', arr.shape)
print('arr_sum0.shape: ', arr_sum0.shape)
print('arr_sum0: ', arr_sum0)
# 출력
# arr.shape: (3, 2, 4)
# arr_sum0.shape: (2, 4)
# arr_sum0: [[27 30 33 36]
# [39 42 45 48]]
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum0 = np.sum(arr, axis=0)
print('arr.shape: ', arr.shape)
print('arr_sum0.shape: ', arr_sum0.shape)
print('arr_sum0: ', arr_sum0)
# 출력
# arr.shape: (3, 2, 4)
# arr_sum0.shape: (2, 4)
# arr_sum0: [[27 30 33 36]
# [39 42 45 48]]
axis 1
axis '1'로 설정하면 '행'을 기준으로 요소의 합을 도출합니다.그림으로 보면 아래와 같습니다.
sum은 axis 1의 값을 '합산'하여 axis 1이 제거된 '2차원 배열 값'을 새롭게 반환합니다.
(3, 2, 4) shape 데이터 sum 결과는 axis 1(행)이 제거된 (3, 4) shape의 2차원 배열이 반환되는 걸 확인할 수 있습니다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8]],
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum1 = np.sum(arr, axis=1)
print('arr.shape: ', arr.shape)
print('arr_sum1.shape: ', arr_sum1.shape)
print('arr_sum1: ', arr_sum1)
# 출력
# arr.shape: (3, 2, 4)
# arr_sum1.shape: (3, 4)
# arr_sum1: [[ 6 8 10 12]
# [22 24 26 28]
# [38 40 42 44]]
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum1 = np.sum(arr, axis=1)
print('arr.shape: ', arr.shape)
print('arr_sum1.shape: ', arr_sum1.shape)
print('arr_sum1: ', arr_sum1)
# 출력
# arr.shape: (3, 2, 4)
# arr_sum1.shape: (3, 4)
# arr_sum1: [[ 6 8 10 12]
# [22 24 26 28]
# [38 40 42 44]]
axis 2
axis '2'로 설정하면 '열'을 기준으로 요소의 합을 도출합니다.그림으로 보면 아래와 같습니다.
sum은 axis 2의 값을 '합산'하여 axis 2가 제거된 '2차원 배열 값'을 새롭게 반환합니다.
(3, 2, 4) shape 데이터 sum 결과는 axis 2(열)이 제거된 (3, 2) shape의 2차원 배열이 반환되는 걸 확인할 수 있습니다.
arr = np.array([[[1, 2, 3, 4], [5, 6, 7, 8]],
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum2 = np.sum(arr, axis=2)
print('arr.shape: ', arr.shape)
print('arr_sum2.shape: ', arr_sum2.shape)
print('arr_sum2: ', arr_sum2)
# 출력
# 출력
# arr.shape: (3, 2, 4)
# arr_sum2.shape: (3, 2)
# arr_sum2: [[10 26]
# [42 58]
# [74 90]]
[[9, 10, 11, 12], [13, 14, 15, 16]],
[[17, 18, 19, 20], [21, 22, 23, 24]]])
arr_sum2 = np.sum(arr, axis=2)
print('arr.shape: ', arr.shape)
print('arr_sum2.shape: ', arr_sum2.shape)
print('arr_sum2: ', arr_sum2)
# 출력
# 출력
# arr.shape: (3, 2, 4)
# arr_sum2.shape: (3, 2)
# arr_sum2: [[10 26]
# [42 58]
# [74 90]]
이렇게 axis의 구조를 알아봤습니다.
이해가 안가거나 잘못된 정보는 댓글 부탁드립니다.
참고문헌
[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/
댓글
댓글 쓰기