Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy nancumsum() – NaN을 0으로 처리하는 배열 요소의 누적 합계 구하기

주어진 축(axis)을 따라 NaN(Not a Number)을 0으로 취급하면서 배열 요소의 누적 합계(cumulative sum)를 구하려면 numpy.nancumsum() 메서드를 사용합니다. 이 메서드는 NaN을 만나더라도 누적 합계가 변하지 않으며, 배열 맨 앞에 위치한 NaN은 0으로 대체됩니다. 또한 모든 요소가 NaN이거나 비어 있는 슬라이스에는 0이 반환됩니다.

nancumsum()은 별도의 새로운 배열을 만들어 결과를 반환합니다. 단, out 매개변수가 지정된 경우에는 그 배열에 결과가 저장되어 반환됩니다. 결과 배열은 입력 배열 a와 같은 크기를 가지며, axis가 None이 아니거나 a가 1차원 배열일 때는 a와 동일한 형태(shape)를 갖습니다.

누적 합계는 다음과 같은 방식으로 계산됩니다. 예를 들어 값이 5, 10, 15, 20이라면 5 → 5+10 → 5+10+15 → 5+10+15+20 순서로 누적됩니다.

매개변수 살펴보기

  • a (첫 번째 매개변수): 누적 합계를 계산할 입력 배열입니다.
  • axis (두 번째 매개변수): 누적 합계를 계산할 축입니다. 기본값인 None을 지정하면 평탄화(flatten)된 배열 전체에 대해 누적 합계가 계산됩니다.
  • dtype (세 번째 매개변수): 반환 배열과 중간 합계 계산에 사용될 데이터 타입입니다. 지정하지 않으면 기본적으로 a의 dtype이 사용되며, a의 정수 타입 정밀도가 플랫폼 기본 정수보다 낮은 경우에는 플랫폼 기본 정수 타입이 적용됩니다.
  • out (네 번째 매개변수): 결과를 저장할 대체 출력 배열입니다. 예상되는 출력과 동일한 형태(shape)와 버퍼 길이를 가져야 하며, 필요한 경우 타입이 자동으로 변환(cast)됩니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

array() 메서드를 사용해 numpy 배열을 생성합니다. 정수형 요소와 함께 nan을 포함시켰습니다.

arr = np.array([10, 20, 30, 40, np.nan])

생성한 배열을 화면에 출력합니다.

print("Our Array...\n", arr)

배열의 차원(ndim)을 확인합니다.

print("\nDimensions of our Array...\n", arr.ndim)

배열 객체의 데이터 타입(dtype)을 확인합니다.

print("\nDatatype of our Array object...\n", arr.dtype)

NaN을 0으로 처리하면서 배열 요소의 누적 합계를 구하기 위해 nancumsum() 메서드를 호출합니다. NaN을 만나도 누적 합계는 그대로 유지되며, 선행하는 NaN은 0으로 대체됩니다.

print("\nCumulative Sum of array elements...\n", np.nancumsum(arr))

전체 예제 코드

import numpy as np

# array() 메서드를 사용해 numpy 배열 생성
# 정수형 요소와 함께 nan을 포함시켰습니다.
arr = np.array([10, 20, 30, 40, np.nan])

# 배열 출력
print("Our Array...\n", arr)

# 차원 확인
print("\nDimensions of our Array...\n", arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n", arr.dtype)

# NaN을 0으로 처리하면서 배열 요소의 누적 합계를 반환하려면 nancumsum() 메서드를 사용합니다.
# NaN을 만나면 누적 합계는 변하지 않고, 선행하는 NaN은 0으로 대체됩니다.

print("\nCumulative Sum of array elements...\n", np.nancumsum(arr))

실행 결과

Our Array...
[10. 20. 30. 40. nan]

Dimensions of our Array...
1

Datatype of our Array object...
float64

Cumulative Sum of array elements...
[ 10.  30.  60. 100. 100.]