숫자 목록의 산술 평균 (한 유형의 평균)을 계산하기 위해 Python에 내장 또는 표준 라이브러리 방법이 있습니까?
숫자 목록의 산술 평균 (한 유형의 평균)을 계산하기 위해 Python에 내장 또는 표준 라이브러리 방법이 있습니까?
답변:
표준 라이브러리에 아무것도 없습니다. 그러나 다음과 같은 것을 사용할 수 있습니다.
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
numpy에는이 numpy.mean()
있습니다.
[]
입니다 0
수행 할 수있는 float(sum(l))/max(len(l),1)
.
max
?
NumPy는 numpy.mean
산술 평균 인 a를가집니다 . 사용법은 다음과 같이 간단합니다.
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
사용 statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
파이썬 3.4부터 사용할 수 있습니다. 3.1-3.3 사용자의 경우 PyPI에서 이전 버전의 모듈을 이름 아래에서 사용할 수 있습니다 stats
. 로 변경 statistics
하십시오 stats
.
statistics.mean
시도가 정확 하기 때문 입니다. 의 평균을 정확하게 계산합니다 [1e50, 1, -1e50] * 1000
.
statistics.mean
또한 len()
제수에 사용되는 모든 솔루션 이 질식 하는 생성기 값 표현을 허용합니다 .
당신은 numpy 또는 scipy가 필요하지 않습니다 ...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import division
에서는 프로그램의 최상위에 있다면
a = list()
? 제안 된 코드의 결과는 ZeroDivisionError
입니다.
scipy를 사용하십시오 :
import scipy;
a=[1,2,4];
print(scipy.mean(a));
떠 다니는 캐스팅 대신 다음을 수행 할 수 있습니다.
def mean(nums):
return sum(nums, 0.0) / len(nums)
또는 람다를 사용하여
mean = lambda nums: sum(nums, 0.0) / len(nums)
업데이트 : 2019-12-15
Python 3.8 은 통계 모듈에 fmean 함수를 추가했습니다 . 어느 것이 더 빠르며 항상 float를 반환합니다.
데이터를 부동 소수점으로 변환하고 산술 평균을 계산합니다.
이것은 mean () 함수보다 빠르게 실행되며 항상 float를 반환합니다. 데이터는 시퀀스이거나 반복 가능할 수 있습니다. 입력 데이터 집합이 비어 있으면 StatisticsError가 발생합니다.
fmean ([3.5, 4.0, 5.25])
4.25
버전 3.8의 새로운 기능.
from statistics import mean
avarage=mean(your_list)
예를 들어
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
결과는
3.0
나는 항상 avg
내장 / stdlib에서 생략 된 것으로 가정합니다.
sum(L)/len(L) # L is some list
그리고 로컬 사용에 대한 호출자 코드로 모든 경고가 해결됩니다 .
주목할만한주의 사항 :
비 플로트 결과 : python2에, 9/4는 해결, 사용 2. float(sum(L))/len(L)
또는from __future__ import division
0으로 나누기 : 목록이 비어있을 수 있습니다. 해결하려면 :
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)
귀하의 질문에 대한 정답은를 사용하는 것 statistics.mean
입니다. 그러나 재미를 위해 여기에 len()
함수를 사용하지 않는 평균 버전이 있으므로 statistics.mean
지원하지 않는 생성기에서 (예 :) 사용할 수 있습니다 len()
.
from functools import reduce
from operator import truediv
def ave(seq):
return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]),
enumerate(seq, start=1),
(0, 0)))
다른 사람들은 이미 좋은 답변을 게시했지만 일부 사람들은 여전히 평균 (avg)을 찾는 고전적인 방법을 찾고있을 수 있으므로 여기 에이 코드를 게시합니다 (Python 3.6에서 테스트 됨).
def meanmanual(listt):
mean = 0
lsum = 0
lenoflist = len(listt)
for i in listt:
lsum += i
mean = lsum / lenoflist
return float(mean)
a = [1, 2, 3, 4, 5, 6]
meanmanual(a)
Answer: 3.5