Python/NumPy

NumPy 누적 함수: cumsum과 cumprod

임베디드 친구 2025. 10. 8. 21:06
반응형

NumPy 누적 함수: cumsum과 cumprod

NumPy는 파이썬에서 과학 계산을 수행하기 위한 강력한 라이브러리로, 다양한 수학적, 통계적 함수들을 제공합니다. 오늘은 그중에서도 누적 함수(cumsum, cumprod) 에 대해 알아보고, 이를 활용한 다양한 예제를 살펴보겠습니다.

누적 함수란?

누적 함수는 배열의 각 원소에 대해 이전 원소의 연산 결과를 누적하여 계산한 결과를 반환하는 함수입니다. 이를 통해 데이터의 누적 합계나 누적 곱을 구할 수 있습니다.

cumsum: 누적 합

cumsum은 배열의 원소를 순차적으로 더한 값을 반환합니다. 예를 들어, 배열 [1, 2, 3, 4]에 대해 cumsum을 적용하면 [1, 3, 6, 10]이 됩니다.

cumprod: 누적 곱

cumprod는 배열의 원소를 순차적으로 곱한 값을 반환합니다. 동일한 배열 [1, 2, 3, 4]에 대해 cumprod를 적용하면 [1, 2, 6, 24]가 됩니다.

이 함수들은 데이터 분석, 통계 계산, 시계열 데이터 처리 등 다양한 분야에서 유용하게 활용됩니다.


NumPy cumsum과 cumprod 사용법

1. 기본 사용법

import numpy as np

# 예제 데이터 생성
data = np.array([1, 2, 3, 4])

# 누적 합 계산
cumsum_result = np.cumsum(data)
print("누적 합:", cumsum_result)

# 누적 곱 계산
cumprod_result = np.cumprod(data)
print("누적 곱:", cumprod_result)

실행 결과:

누적 합: [ 1  3  6 10]
누적 곱: [ 1  2  6 24]

2. 다차원 배열에서의 동작

cumsumcumprod는 다차원 배열에서도 사용할 수 있으며, 이 경우 연산 방향(축)을 지정할 수 있습니다.

예제:

# 2D 배열 생성
data_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 축 0 (세로 방향)으로 누적 합 계산
cumsum_axis0 = np.cumsum(data_2d, axis=0)
print("축 0 누적 합:\n", cumsum_axis0)

# 축 1 (가로 방향)으로 누적 곱 계산
cumprod_axis1 = np.cumprod(data_2d, axis=1)
print("축 1 누적 곱:\n", cumprod_axis1)

실행 결과:

축 0 누적 합:
 [[ 1  2  3]
  [ 5  7  9]
  [12 15 18]]

축 1 누적 곱:
 [[  1   2   6]
  [  4  20 120]
  [  7  56 504]]

3. 마스킹된 배열에서의 누적 함수

NumPy는 np.ma 모듈을 통해 마스킹된 배열에서도 누적 연산을 지원합니다.

예제:

import numpy.ma as ma

# 마스킹된 배열 생성
data = ma.array([1, 2, 3, 4], mask=[False, True, False, False])

# 누적 합 계산
cumsum_masked = ma.cumsum(data)
print("마스킹된 누적 합:", cumsum_masked)

# 누적 곱 계산
cumprod_masked = ma.cumprod(data)
print("마스킹된 누적 곱:", cumprod_masked)

실행 결과:

마스킹된 누적 합: [1 -- 4 8]
마스킹된 누적 곱: [1 -- 3 12]

4. 실전 예제: 시계열 데이터 누적 계산

누적 함수는 시계열 데이터의 누적 합계나 누적 성과를 계산하는 데 자주 사용됩니다.

예제:

# 주식 가격 변화율 데이터 (예제)
price_changes = np.array([0.01, 0.02, -0.005, 0.01])

# 누적 수익률 계산
cumulative_returns = np.cumprod(1 + price_changes) - 1
print("누적 수익률:", cumulative_returns)

실행 결과:

누적 수익률: [0.01     0.0302   0.024692 0.034938]

5. 데이터 시각화

cumsumcumprod를 활용한 데이터를 시각화하면 더욱 직관적으로 이해할 수 있습니다.

예제:

import matplotlib.pyplot as plt

# 데이터 생성
data = np.random.randint(1, 10, size=10)
cumsum_result = np.cumsum(data)

# 시각화
plt.plot(data, label="원본 데이터", marker='o')
plt.plot(cumsum_result, label="누적 합", marker='o')
plt.xlabel("Index")
plt.ylabel("Value")
plt.title("cumsum 예제")
plt.legend()
plt.grid()
plt.show()

마무리

NumPy의 cumsumcumprod 함수는 간단하면서도 강력한 기능을 제공합니다. 이 함수들은 데이터의 누적 합계나 곱을 손쉽게 계산할 수 있도록 도와주며, 다양한 응용 사례에 활용될 수 있습니다. 앞으로 데이터 분석이나 시계열 처리 작업을 할 때 유용하게 사용해 보세요!

반응형