주어진 축(axis)을 따라 배열 요소의 누적 곱을 계산하되, NaN 값을 1로 취급하고 싶다면 nancumprod() 메서드를 사용하면 됩니다. 이 메서드는 NaN을 만나더라도 누적 곱이 변하지 않으며, 배열 앞부분에 있는 선행 NaN은 모두 1로 대체됩니다. 또한 슬라이스 전체가 NaN이거나 비어 있는 경우에는 1을 반환합니다.
이 메서드는 out 매개변수가 지정되지 않은 경우 결과를 담은 새로운 배열을 반환하며, out이 지정된 경우에는 해당 배열에 결과를 저장한 후 반환합니다. 누적 곱의 동작 방식은 다음과 같습니다. 예를 들어 요소가 5, 10, 15, 20이라면 5 → 5×10 → 5×10×15 → 5×10×15×20 순서로 계산됩니다.
nancumprod()의 주요 매개변수
1번째 매개변수: 입력 배열입니다.
2번째 매개변수(Axis): 누적 곱을 계산할 축을 지정합니다. 기본값으로 설정하면 입력 배열이 1차원으로 평탄화(flatten)된 상태에서 계산됩니다.
3번째 매개변수(dtype): 반환되는 배열과 곱셈 과정에서 사용되는 누산기(accumulator)의 데이터 타입을 지정합니다. dtype을 명시하지 않으면 입력 배열 a의 dtype이 기본값으로 사용됩니다. 단, a가 기본 플랫폼 정수보다 정밀도가 낮은 정수형 dtype을 가질 경우에는 플랫폼 기본 정수형이 대신 사용됩니다.
4번째 매개변수(out): 결과를 저장할 대체 출력 배열입니다. 예상 출력과 동일한 형태(shape)와 버퍼 길이를 가져야 하며, 필요한 경우 결과값의 타입은 자동으로 캐스팅(casting)됩니다.
단계별 구현 방법
먼저 필요한 라이브러리를 임포트합니다 −
import numpy as np
array() 메서드를 사용하여 NumPy 배열을 생성합니다. 여기에는 int 타입 요소와 함께 nan도 포함시켰습니다 −
arr = np.array([[5, 10, 15], [20, np.nan, 30]])
배열을 화면에 출력합니다 −
print("Our Array...\n",arr)배열의 차원을 확인합니다 −
print("\nDimensions of our Array...\n",arr.ndim)배열의 데이터 타입을 확인합니다 −
print("\nDatatype of our Array object...\n",arr.dtype)nancumprod() 메서드를 사용하여 NaN을 1로 취급하면서 특정 축을 따라 배열 요소의 누적 곱을 계산합니다. 이때 dtype 매개변수로 결과 데이터 타입을 int로 지정했습니다 −
print("\nCumulative Product of array elements...\n",np.nancumprod(arr, axis = 1, dtype = int))전체 예제 코드
import numpy as np
# array() 메서드를 사용하여 NumPy 배열 생성
# int 타입 요소와 함께 nan 포함
arr = np.array([[5, 10, 15], [20, np.nan, 30]])
# 배열 출력
print("Our Array...\n",arr)
# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)
# nancumprod() 메서드로 NaN을 1로 취급하며 누적 곱 계산
# NaN을 만나도 누적 곱은 변하지 않고, 선행 NaN은 1로 대체됨
print("\nCumulative Product of array elements...\n",np.nancumprod(arr, axis = 1, dtype = int))실행 결과
Our Array... [[ 5. 10. 15.] [20. nan 30.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Cumulative Product of array elements... [[ 5 50 750] [ 20 20 600]]
위 실행 결과를 보면, 원래 배열은 float64 타입이지만 dtype = int 옵션 덕분에 최종 누적 곱 결과는 정수형으로 출력된 것을 확인할 수 있습니다. 두 번째 행에서 nan 위치는 20(누적 값 그대로 유지)으로 처리되고, 이후 30이 곱해져 600이 된 것을 볼 수 있습니다.