web-dev-qa-db-fra.com

Calcul de la moyenne arithmétique (un type de moyenne) en Python

Existe-t-il une méthode de bibliothèque intégrée ou standard en Python permettant de calculer la moyenne arithmétique (un type de moyenne) d'une liste de nombres?

237
jrdioko

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() .

266
NPE

NumPy a un numpy.mean qui est une moyenne arithmétique. L'utilisation est aussi simple que cela:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
181
Bengt

Dans Python 3.4, il existe 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 d'origine du module est disponible sur PyPI sous le nom stats . Il suffit de changer statistics en stats.

164
kirbyfan64sos

Vous n'avez même pas besoin de Numpy ou Scipy ...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
49
Mumon

Utilisez scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));
8
Elendurwen

Au lieu de lancer pour flotter, vous pouvez faire ce qui suit

def mean(nums):
    return sum(nums, 0.0) / len(nums)

ou en utilisant lambda

mean = lambda nums: sum(nums, 0.0) / len(nums)
6
Vlad Bezden
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
2
jasonleonhard
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)
2
Muhoza yves

J'ai toujours supposé que avg est omis de builtins/stdlib car il est aussi simple que

sum(L)/len(L) # L is some list

et toutes les mises en garde seraient traitées dans le code de l'appelant pour une utilisation locale déjà .

Mises en garde notables:

  1. résultat non-float: en python2, 9/4 est 2. pour résoudre, utilisez float(sum(L))/len(L) ou from __future__ import division

  2. division par zéro: la liste peut être vide. résoudre:

    if not L:
        raise WhateverYouWantError("foo")
    avg = float(sum(L))/len(L)
    
0
n611x007
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
0
fariborz najafi

La bonne réponse à votre question est d'utiliser statistics.mean. Mais pour le plaisir, voici une version de moyenne qui n’utilise pas la fonction len(), elle peut donc être utilisée (comme statistics.mean) sur des générateurs ne prenant pas en charge 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)))
0
PaulMcG