반응형

파이썬, reduce를 이용한 평균, 분산, 팩토리얼 계산

글. 오상문 sualchi@daum.net

 

파이썬의 functools 내장 모듈의 reduce() 함수는 주로 누적 집계를 하기 위해서 사용합니다.

기본 문법은 다음과 같습니다. 

 

reduce( 집계함수, 데이터집합 [, 초기값] )

 

초기값을 기준으로 데이터 루프를 돌면서 집계 함수를 계속해서 적용합니다. 초기값을 생략하면 처음값이 사용됩니다.

 

집계함수의 첫번째 인자는 누적된 값을 계속 갱신합니다.

두번째 인자는 데이터 집합에서 현재 처리할 값입니다. 현재값은 루프 돌면서 계속 바뀝니다.

 

다음 예제는 reduce를 이용하여 1~N 합을 구하는 예제입니다.

from functools import reduce
def total(N): # 1~N 합
    return reduce(lambda a, b: a+b, range(1, N+1))
print("1~100 합:", total(100)) 
# 1~100 합: 5050

 

다음 예제는 reduce를 이용하여 팩토리얼을 구하는 예제입니다.

from functools import reduce
def factorial(N): # 팩토리얼
    return reduce(lambda a, b: a*b, range(1, N+1))
print("10!:", factorial(10)) 
# 10!: 3628800

 

다음 예제는 reduce를 이용하여 평균, 분산 계산을 합니다.

from functools import reduce
def average(data): # 평균
    return reduce(lambda a, b: a+b, data)/len(data)
def variance(data, avg): # 분산
    return reduce(lambda a, b: a+b, map(lambda s:(s-avg)**2, data))/len(data)
scores = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
avg = average(scores)
print("평균:", avg)
print("분산:", variance(scores, avg))
# 평균: 55.0
# 분산: 825.0

 

이상.

반응형

+ Recent posts