¿Existe un método de biblioteca incorporado o estándar en Python para calcular la media aritmética (un tipo de promedio) de una lista de números?
¿Existe un método de biblioteca incorporado o estándar en Python para calcular la media aritmética (un tipo de promedio) de una lista de números?
Respuestas:
No tengo conocimiento de nada en la biblioteca estándar. Sin embargo, podría usar algo como:
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0
En numpy, hay numpy.mean().
[]es 0, que puede hacerse por float(sum(l))/max(len(l),1).
max?
NumPy tiene un numpy.meanque es una media aritmética. El uso es tan simple como esto:
>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
Uso statistics.mean:
import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335
Está disponible desde Python 3.4. Para los usuarios 3.1-3.3, una versión anterior del módulo está disponible en PyPI bajo el nombre stats. Solo cambia statisticsa stats.
timeit("numpy.mean(vec)), timeit("sum(vec)/len(vec)")y timeit("statistics.mean(vec)")- este último es más lento que los demás por un factor enorme (> 100 en algunos casos en mi PC). Esto parece deberse a una implementación particularmente precisa del sumoperador statistics, ver PEP y Código . Sin embargo, no estoy seguro de la razón de la gran diferencia de rendimiento entre statistics._sumy numpy.sum.
statistics.meanintenta ser correcto . Calcula correctamente la media de [1e50, 1, -1e50] * 1000.
statistics.meantambién aceptará una expresión generadora de valores, que todas las soluciones que usan len()para el divisor se ahogarán.
Ni siquiera necesitas numpy o scipy ...
>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
from __future__ import divisionen la parte superior de su programa
a = list()? El código propuesto da como resultado ZeroDivisionError.
Use scipy:
import scipy;
a=[1,2,4];
print(scipy.mean(a));
En lugar de lanzar para flotar, puedes hacer lo siguiente
def mean(nums):
return sum(nums, 0.0) / len(nums)
o usando lambda
mean = lambda nums: sum(nums, 0.0) / len(nums)
ACTUALIZACIONES: 2019-12-15
Python 3.8 agregó la función fmean al módulo de estadísticas . Que es más rápido y siempre devuelve flotante.
Convierta datos en flotantes y calcule la media aritmética.
Esto se ejecuta más rápido que la función mean () y siempre devuelve un flotante. Los datos pueden ser una secuencia o iterables. Si el conjunto de datos de entrada está vacío, genera un StatisticsError.
fmean ([3.5, 4.0, 5.25])
4.25
Nuevo en la versión 3.8.
from statistics import mean
avarage=mean(your_list)
por ejemplo
from statistics import mean
my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)
y el resultado es
3.0
def avg(l):
"""uses floating-point division."""
return sum(l) / float(len(l))
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)
Siempre supuse que avgse omite de builtins / stdlib porque es tan simple como
sum(L)/len(L) # L is some list
y cualquier advertencia ya se abordaría en el código de llamada para uso local .
Advertencias notables:
resultado no flotante: en python2, 9/4 es 2. para resolver, usar float(sum(L))/len(L)ofrom __future__ import division
división por cero: la lista puede estar vacía. resolver:
if not L:
raise WhateverYouWantError("foo")
avg = float(sum(L))/len(L)La respuesta adecuada a su pregunta es usar statistics.mean. Pero por diversión, aquí hay una versión de mean que no usa la len()función, por lo que (like statistics.mean) se puede usar en generadores, que no admiten 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)))
Otros ya publicaron muy buenas respuestas, pero algunas personas aún podrían estar buscando una forma clásica de encontrar Mean (promedio), así que aquí publico esto (código probado 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