IT in General/Python

functools.reduce

Algorithmus 2022. 3. 2. 10:37

functools는 잘 이용하면 코테나 인터뷰 뿐 아니라 실무에서도 많은 작업을 간편하게 할 수 있도록 도와준다.

 

구문: functools.reduce(function, iterable[, initializer])

역할: list와 같은 iterable의 값을 앞에서부터 하나씩 function에 넣어 계산하고, 그 결과를 다시 function의 입력값으로 넣어 계산하는 과정을 반복하여 최종적인 값을 돌려준다.

 

예1. 리스트에 있는 값을 누적해서 계산
import functools
functools.reduce(lambda x, y: x+y, [2,3,4,5], 1) # ((((1+2)+3)+4)+5)​

예2. pandas Dataframe에 저장된 값을 통해 기하평균을 구함
data['returns_GA'] = functools.reduce(lambda x, y: x * y,
(data['returns'].shift(-i) + 1 for i in range(5))) ** (1/5) - 1​
즉, 이것을
data['returns'].head(10)

Date
2003-12-08    0.000760
2003-12-09   -0.002446
2003-12-10   -0.005327
2003-12-11   -0.005525
2003-12-12    0.002821
2003-12-14    0.000000
2003-12-15    0.005711
2003-12-16   -0.000085
2003-12-17    0.006103
2003-12-18   -0.002696
Name: returns, dtype: float64​

 
이렇게 만든 것임
data['returns_GA'].head(10)

Date
2003-12-08   -0.001949
2003-12-09   -0.002101
2003-12-10   -0.000474
2003-12-11    0.000577
2003-12-12    0.002906
2003-12-14    0.001801
2003-12-15    0.003319
2003-12-16    0.002177
2003-12-17    0.002647
2003-12-18    0.001411
Name: returns_GA, dtype: float64

 

정리: 원래 iterator를 func을 이용해서 줄여(reduce) 주는 도구(tools)이라고 기억하자. 함수가 인자로 들어가기 때문에 함수형 프로그래밍(functional programming)의 예시이다.

반응형

'IT in General > Python' 카테고리의 다른 글

Immutable vs mutable  (0) 2023.10.22
Iterator와 Generator 사용방법  (0) 2023.03.15
any와 all, 그리고 return  (0) 2022.03.25
데코레이터와 피보나치  (0) 2022.03.03
itertools.islice, tee, groupby, product  (0) 2022.03.03