배열 요소의 누적 합계(cumulative sum)를 계산할 때 NaN 값을 0으로 취급하고 싶다면 NumPy의 nancumsum() 메서드를 사용하면 됩니다. 일반적인 cumsum()과 달리, 이 함수는 NaN을 만나도 누적 합이 NaN으로 오염되지 않으며, 배열 앞쪽에 위치한 NaN은 자동으로 0으로 대체됩니다.
nancumsum()의 주요 특징
모든 요소가 NaN으로만 이루어진 슬라이스나 빈(empty) 슬라이스에 대해서는 0이 반환됩니다. 별도의 out 매개변수를 지정하지 않으면 결과를 담는 새로운 배열이 반환되고, 지정한 경우 해당 배열에 결과가 저장됩니다.
결과 배열의 크기는 원본 배열 a와 같으며, axis가 None이 아니거나 a가 1차원 배열인 경우 shape 또한 동일하게 유지됩니다.
누적 합계는 다음과 같은 방식으로 진행됩니다. 예를 들어 요소가 5, 10, 15, 20이라면 결과는 5 → 5+10 → 5+10+15 → 5+10+15+20 순서로 계산됩니다.
nancumsum()의 매개변수
- 1번째 매개변수 (a): 누적 합을 계산할 입력 배열입니다.
- 2번째 매개변수 (axis): 누적 합을 계산할 축입니다. 기본값(None)은 평탄화(flattened)된 배열 전체에 대해 누적 합을 계산합니다.
- 3번째 매개변수 (dtype): 반환되는 배열 및 누적 계산에 사용되는 accumulator의 데이터 타입입니다. 지정하지 않으면
a의 dtype이 기본값으로 사용되지만, 만약a가 플랫폼 기본 정수보다 낮은 정밀도의 정수 dtype을 가질 경우 플랫폼 기본 정수 타입이 대신 사용됩니다. - 4번째 매개변수 (out): 결과를 저장할 대체 출력 배열입니다. 예상되는 출력과 동일한 shape와 버퍼 길이를 가져야 하며, 필요 시 타입이 자동으로 변환(cast)됩니다.
구현 단계
먼저 필요한 라이브러리를 import 합니다.
import numpy as np
array() 메서드를 사용해 NumPy 배열을 생성합니다. 이때 int 타입 요소들과 함께 nan을 포함시켰습니다.
arr = np.array([[10, 20, 30], [40, np.nan, 60]])
생성한 배열을 화면에 출력합니다.
print("Our Array...\n",arr)배열의 차원(dimension)을 확인합니다.
print("\nDimensions of our Array...\n",arr.ndim)배열 객체의 데이터 타입(datatype)을 확인합니다.
print("\nDatatype of our Array object...\n",arr.dtype)NaN을 0으로 취급하며 지정된 축(axis=1, 즉 행 방향)을 따라 누적 합계를 계산하기 위해 nancumsum() 메서드를 호출합니다. NaN을 만나더라도 누적 값이 유지되고, 선행하는 NaN은 0으로 처리됩니다.
print("\nCumulative Sum of array elements...\n",np.nancumsum(arr, axis = 1))전체 예제 코드
import numpy as np
# array() 메서드로 NumPy 배열 생성
# int 타입 요소들과 함께 nan을 포함
arr = np.array([[10, 20, 30], [40, np.nan, 60]])
# 배열 출력
print("Our Array...\n",arr)
# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)
# NaN을 0으로 취급하며 axis=1 방향으로 누적 합계 계산
# NaN을 만나도 누적 값은 변하지 않으며, 선행 NaN은 0으로 대체됨
print("\nCumulative Sum of array elements...\n",np.nancumsum(arr, axis = 1))실행 결과
Our Array... [[10. 20. 30.] [40. nan 60.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Cumulative Sum of array elements... [[ 10. 30. 60.] [ 40. 40. 100.]]
출력 결과를 보면 첫 번째 행은 10 → 30 → 60으로 누적되고, 두 번째 행에서 NaN 위치는 이전 값인 40이 그대로 유지되어 40 → 40 → 100이 됩니다. 이처럼 nancumsum()을 활용하면 결측치(NaN)가 포함된 데이터에서도 안정적으로 누적 합계를 계산할 수 있습니다.