Calcul de la moyenne arithmétique (un type de Moyenne) en Python
12 réponses
Je ne suis au courant de rien dans la bibliothèque standard. Cependant, vous pourriez utiliser quelque chose comme:
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
à numpy, il y a numpy.mean()
.
NumPy a une numpy.mean
qui est une moyenne arithmétique. L'Usage est aussi simple que ceci:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
en Python 3.4, il y a un nouveau module statistics
. Vous pouvez maintenant utiliser statistics.mean
:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
pour les utilisateurs 3.1-3.3, La version originale du module est disponible sur PyPI sous le nom stats
. Il suffit de remplacer statistics
par stats
.
vous n'avez même pas besoin de numpy ou scipy...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
Utilisation scipy:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
au lieu de mouler pour flotter vous pouvez faire la suite
def mean(nums):
return sum(nums, 0.0) / len(nums)
ou utilisant lambda
mean = lambda nums: sum(nums, 0.0) / len(nums)
def avg(l):
"""uses floating-point division."""
return sum(l) / float(len(l))
exemples:
l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]
print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
def list_mean(nums):
sumof = 0
num_of = len(nums)
mean = 0
for i in nums:
sumof += i
mean = sumof / num_of
return float(mean)
j'ai toujours supposé que avg
est omis dans le builtins / stdlib parce qu'il est aussi simple que
sum(L)/len(L) # L is some list
et toute mise en garde serait dont il est question dans le code de l'appelant pour l'usage local déjà .
attention:
-
non-float résultat: en python2, 9/4 est 2. pour résoudre le problème, utilisez
float(sum(L))/len(L)
oufrom __future__ import division
-
la division par zéro: la liste peut être vide. pour résoudre:
if not L: raise WhateverYouWantError("foo") avg = float(sum(L))/len(L)
la bonne réponse à votre question Est d'utiliser statistics.mean
. Mais pour le plaisir, voici une version de mean qui n'utilise pas la fonction len()
, de sorte qu'il (comme statistics.mean
) peut être utilisé sur les générateurs, qui ne supportent pas 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)))
from statistics import mean
avarage=mean(your_list)
par exemple
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
et le résultat est
3.0
D'autres ont déjà posté de très bonnes réponses, mais certaines personnes pourraient toujours être à la recherche d'un moyen classique de trouver Moyen(avg), donc ici je poste ceci (code testé en 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