study
|
2024. 7. 2. 12:03
[Python] 누적합에 활용되는 accumulate
1. accumulate란?
Python의 itertools 모듈에 포함된 함수로, 누적 합계 또는 누적 계산을 수행하는데 사용된다.
기본적으로 입력 시퀀스 요소들에 대해 누적 합을 계산하지만, 함수 인수를 제공하여 다른 누적 연산도 수행할 수 있다.
1.1 기본 사용법
itertools.accumulate(iterable, func=operator.add)
- iterable : 누적 계산을 수행할 입력 시퀀스
- func : 두 인수를 취하고 하나의 값을 반환하는 이항 함수. 기본 값은 operator.add로 누적합계를 계산하다.
- 입력된 iterable과 같은 타입의 값을 생성하는 이터레이터를 반환한다. list로 변환하여 결과를 확인할 수 있다.
1.2 사용 예시
1.2.1 기본 사용법 (누적 합계)
import itertools
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data)
print(list(result))
# 출력결과
# [1, 3, 6, 10, 15]
1.2.2 operatr 모듈의 함수 이용한 누적 곱
accumulate 함수의 func 매개변수에 사용할 수 있는 다양한 기본 함수들은 python 표준 라이브러리에서 제공하는 여러 이항함수들이다.
이 함수들은 operator 모듈에 주로 포함되어 있으며, 수학적 연산, 비트 연산, 비교 연산 등을 수행할 수 있다.
더보기
1. 수학적 연산
- operator.add(a, b) : 두 값을 더합니다.
- operator.mul(a, b) : 두 값을 곱합니다.
- operator.sub(a, b) : 두 값을 뺍니다.
- operator.truediv(a, b) : 두 값을 나눕니다.
- operator.floordiv(a, b) : 두 값을 나눈 몫을 구합니다.
- operator.mod(a, b) : 두 값을 나눈 나머지를 구합니다.
- operator.pow(a, b) : a를 b만큼 제곱합니다.
2. 비트 연산
- operator.and_(a, b) : 두 값의 비트 AND 연산을 수행합니다.
- operator.or_(a, b) : 두 값의 비트 OR 연산을 수행합니다.
- operator.xor(a, b) : 두 값의 비트 XOR 연산을 수행합니다.
- operator.lshift(a, b) : a를 b만큼 왼쪽으로 시프트합니다.
- operator.rshift(a, b) : a를 b만큼 오른쪽으로 시프트합니다.
3. 비교 연산
- operator.lt(a, b) : a < b
- operator.le(a, b) : a <= b
- operator.eq(a, b) : a == b
- operator.ne(a, b) : a != b
- operator.ge(a, b) : a >= b
- operator.gt(a, b) : a > b
import itertools
import operator
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data, func=operator.mul)
print(list(result))
# 출력 결과
# [1, 2, 6, 24, 120]
1.2.3 람다 함수를 사용한 누적 계산
import itertools
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data, func=lambda x, y: x - y)
print(list(result))
# 출력 결과
# [1, -1, -4, -8, -13]
1.2.4 사용자 정의 함수 활용
사용자 정의 함수로 각 요소의 제곱을 누적합에 더하는 예제이다.
사용자 정의함수는 두개의 매개변수를 필요로 한다.
- acc : 누적 값. 현재까지 계산된 결과를 의미한다.
- x : 현재 요소. 현재 이터레이션에서 처리 중인 입력 시퀀스의 요소를 의미한다.
함수는 입력 시퀀스의 첫 번째 요소를 누적값(acc)의 초가값으로 사용하고, 이후 각 요소마다 acc와 x를 인수로 하여 함수를 호출한다.
import itertools
data = [1, 2, 3, 4, 5]
def accumulate_square_sum(acc, x):
return acc + x ** 2
result = itertools.accumulate(data, func=accumulate_square_sum)
print(list(result))
# 출력 결과
# [1, 5, 14, 30, 55]728x90
'study' 카테고리의 다른 글
| [Python] 문자열을 특정 길이로 맞추기 (0) | 2024.09.04 |
|---|---|
| imos 알고리즘 (0) | 2024.07.02 |
bbooo
Writer