배열 요소의 누적 합계를 계산할 때 NaN(Not a Number) 값을 0으로 취급하고 싶다면 numpy.nancumsum() 메서드를 사용하면 됩니다. 이 메서드는 NaN을 만나도 누적 합계가 변하지 않으며, 배열 앞부분에 있는 선행 NaN은 0으로 대체됩니다. 또한 모든 요소가 NaN이거나 비어 있는 슬라이스에 대해서는 0을 반환합니다.
결과는 별도의 새로운 배열로 반환되지만, out 매개변수를 지정하면 해당 배열에 결과가 저장되어 반환됩니다. 결과 배열의 크기는 입력 배열 a와 동일하며, axis가 None이 아니거나 a가 1차원 배열인 경우에는 형태(shape)도 동일합니다.
nancumsum()의 주요 매개변수
- 첫 번째 매개변수(a): 누적 합계를 계산할 입력 배열입니다.
- 두 번째 매개변수(axis): 누적 합계를 계산할 축입니다. 기본값(None)은 배열을 1차원으로 평탄화(flatten)한 뒤 전체에 대해 누적 합계를 계산합니다.
- 세 번째 매개변수(dtype): 반환되는 배열과 누적 합계를 저장하는 중간 연산에 사용할 데이터 타입입니다. dtype을 지정하지 않으면 기본적으로
a의 dtype을 사용하지만,a가 플랫폼 기본 정수보다 낮은 정밀도의 정수형일 경우에는 플랫폼 기본 정수형이 사용됩니다. - 네 번째 매개변수(out): 결과를 저장할 대체 출력 배열입니다. 예상 출력과 동일한 형태와 버퍼 길이를 가져야 하며, 필요 시 타입이 자동으로 변환(cast)됩니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
array() 메서드를 사용해 NumPy 배열을 생성합니다. 정수형 요소와 함께 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)을 따라 배열 요소의 누적 합계를 구하기 위해 nancumsum() 메서드를 사용합니다.
print("\nCumulative Sum of array elements...\n",np.nancumsum(arr, axis = 1))전체 예제 코드
import numpy as np
# array() 메서드로 NumPy 배열 생성
# 정수형 요소와 함께 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.]]
실행 결과를 보면 두 번째 행에서 NaN 위치의 누적 합계가 이전 값(40) 그대로 유지되고, 다음 요소에서는 40 + 60 = 100으로 정상적으로 계산된 것을 확인할 수 있습니다. 이처럼 nancumsum()을 활용하면 결측치(NaN)가 포함된 데이터에서도 안정적으로 누적 합계를 구할 수 있습니다.