Python/Numpy

[Numpy] np.sum() 사용법, axis와 keepdims 의미

jimmy_AI 2022. 2. 2. 20:52
반응형

파이썬 넘파이 합계 함수 np.sum() 사용 방법 정리

안녕하세요.

이번 글에서는 넘파이 라이브러리에서 전체 합계 혹은 축 합계를 구할 수 있는

np.sum 함수의 사용법을 주요 인자인 axis와 keepdims 인자를 중심으로

설명해보는 시간을 가져보도록 하겠습니다.

 

np.sum() 함수 기본 사용법

기본 사용법은 array 내 전체 값들의 합을 구하는 방법으로,

파이썬 내장 함수인 sum과 동일한 기능을 수행하게 됩니다.

 

np.sum(array) 혹은 array.sum() 두 가지 형태로 전체 합계를 구할 수 있습니다.

이번 글에서는 아래의 간단한 2차원 배열에서 합계를 구한 예시를 살펴보도록 하겠습니다.

import numpy as np

a = np.array([[1, 0, 3],
             [2, 5, 4],
             [3, 6, 7]])

np.sum(a) # a.sum() 가능, 결과 : 31

 

 

축 합계 구하기 : axis 인자

모든 원소의 합계가 아닌, 특정 축을 기준으로만 합계를 구하기 위해서는,

axis 인자를 지정해주시면 됩니다.

 

np.sum(array, axis = 1) 처럼 사용하시면 되는데, 'axis = '를 생략하고 np.sum(array, 1)

로도 사용이 가능하며, array.sum(array, 1)의 표현 방법도 유효합니다.

 

축 합계의 원리를 그림으로 나타내면 다음과 같이 표현할 수 있습니다.

기본적으로 keepdims 인자가 지정되지 않은 상황에서는,

n차원 array를 input으로 넣으면 n-1차원 array가 결과로 반환됩니다.

np.sum(a, axis = 0)
# array([ 6, 11, 14])

np.sum(a, axis = 1)
# array([ 4, 11, 16])

2차원 array의 축 합계를 구한 결과는 1차원 array로 반환되었습니다.

 

 

차원 유지하여 합계 구하기 : keepdims 인자

n차원 array에서 축 합계를 구한 뒤, 반환 결과를 n차원으로 유지하기 위해서는

keepdims 인자를 True로 지정해주시면 됩니다.

np.sum(a, axis = 0, keepdims = True)
# array([[ 6, 11, 14]])

np.sum(a, axis = 1, keepdims = True)
'''
array([[ 4],
       [11],
       [16]])'''

axis = 0 방향으로 더한 결과는 각 열들의 합이 행벡터 형태로 저장된 결과인데,

3 크기의 1차원 벡터가 아닌 (1, 3) 크기의 2차원 행렬로 나타내어

행벡터 형태로 값이 저장되었다는 정보를 보존하고 있음을 확인할 수 있었습니다.

 

반면, axis = 1 방향으로 더한 결과는 각 행들의 합이 열벡터 형태로 저장된 결과로,

(3, 1) 크기의 2차원 행렬로 열벡터 형태라는 정보가 보존되며 결과가 반환되었습니다.