Estoy haciendo un trabajo de estadísticas, tengo una (gran) colección de números aleatorios para calcular la media de, me gustaría trabajar con generadores, porque solo necesito calcular el significa, así que no necesito almacenar los números.medio de cálculo en Python para un generador
El problema es que numpy.mean se rompe si le pasa un generador. Puedo escribir una función simple para hacer lo que quiero, pero me pregunto si hay una forma adecuada e integrada para hacer esto.
Sería bueno si pudiera decir "sum (values)/len (values)", pero len no funciona para genetators, y suma los valores ya consumidos.
He aquí un ejemplo:
import numpy
def my_mean(values):
n = 0
Sum = 0.0
try:
while True:
Sum += next(values)
n += 1
except StopIteration: pass
return float(Sum)/n
X = [k for k in range(1,7)]
Y = (k for k in range(1,7))
print numpy.mean(X)
print my_mean(Y)
éstos ambos dan la misma, correcta, la respuesta, comprar my_mean no funciona para las listas, y numpy.mean no funciona para los generadores.
Me gusta mucho la idea de trabajar con generadores, pero detalles como este parecen echar a perder las cosas.
sabrías la cantidad de números al azar produciría su generador, ¿verdad? –
@Sven Marnach: supongamos que el generador está leyendo de un archivo? – Jimmy
Si realmente no desea almacenar los datos (y no implementar su propia función 'sum' más lenta), podría crear un generador de conteo y llamarlo así:' co = countingGen(); mean = sum (co (data))/co.getCount() ' –