주어진 축을 따라 배열 요소의 누적 합계(cumulative sum)를 계산하되, NaN(Not a Number) 값을 0으로 취급하고 싶다면 NumPy의 np.nancumsum() 메서드를 사용하면 됩니다.
nancumsum()의 동작 방식은 다음과 같습니다.
- 계산 도중 NaN을 만나더라도 누적 합계 값은 변하지 않습니다.
- 배열 앞부분에 위치한 선행 NaN은 0으로 대체됩니다.
- 모든 요소가 NaN이거나 비어 있는 슬라이스에는 0이 반환됩니다.
누적 합계란 5, 5+10, 5+10+15, 5+10+15+20처럼 이전 값들에 현재 값을 순차적으로 더해 나가는 연산입니다.
nancumsum()의 주요 매개변수
- 첫 번째 매개변수(arr): 누적 합계를 계산할 입력 배열입니다.
- 두 번째 매개변수(axis): 누적 합계를 계산할 축입니다. 기본값인 None은 평탄화(flatten)된 배열 전체에 대해 누적 합계를 계산합니다.
- 세 번째 매개변수(dtype): 반환 배열 및 누산기(accumulator)의 데이터 타입입니다. 지정하지 않으면 입력 배열의 dtype을 따르며, 입력 배열이 플랫폼 기본 정수보다 정밀도가 낮은 정수형일 경우 기본 플랫폼 정수 타입이 사용됩니다.
- 네 번째 매개변수(out): 결과를 저장할 대체 출력 배열입니다. 예상 출력과 동일한 shape와 버퍼 길이를 가져야 하며, 필요한 경우 타입이 자동으로 캐스팅됩니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
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으로 처리하며 축 0을 기준으로 누적 합계를 계산하기 위해 nancumsum() 메서드를 호출합니다.
print("\nCumulative Sum of array elements...\n", np.nancumsum(arr, axis = 0))전체 예제 코드
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으로 처리하며 축 0 기준으로 누적 합계 계산
# NaN을 만나도 누적 합계는 변하지 않고, 선행 NaN은 0으로 대체됨
# 모든 요소가 NaN이거나 비어 있는 슬라이스에는 0이 반환됨
print("\nCumulative Sum of array elements...\n", np.nancumsum(arr, axis = 0))실행 결과
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. 20. 30.] [50. 20. 90.]]
결과 해석
축 0(세로 방향, 열 기준)으로 누적 합계를 계산한 결과를 살펴보겠습니다.
- 첫 번째 열: 10 → 10+40 = 50
- 두 번째 열: 20 → 20+NaN(0으로 처리) = 20
- 세 번째 열: 30 → 30+60 = 90
이처럼 nancumsum()은 NaN을 0으로 간주하기 때문에, 일반 cumsum()과 달리 NaN이 포함된 배열에서도 NaN 전파 없이 안정적으로 누적 합계를 얻을 수 있습니다.