Robię trochę pracy statystycznej, mam (duży) zbiór liczb losowych do obliczenia średniej, chciałbym pracować z generatorami, ponieważ po prostu muszę obliczyć znaczy, więc nie muszę przechowywać liczb.średnia obliczeniowa w python dla generatora
Problem polega na tym, że numpy.mean zepsuje się, jeśli przekażesz mu generator. Mogę napisać prostą funkcję do robienia tego, co chcę, ale zastanawiam się, czy istnieje odpowiedni, wbudowany sposób, aby to zrobić?
Byłoby miło, gdybym mógł powiedzieć "sum (values)/len (values)", ale len nie działa dla genetów i sumuje już zużyte wartości.
oto przykład:
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)
te obie dają ten sam, prawidłowe, odpowiedź, kupić my_mean nie działa na listach, a numpy.mean nie działa dla generatorów.
Bardzo podoba mi się pomysł pracy z generatorami, ale szczegóły takie jak ta wydają się zepsuć rzeczy.
wiedziałbyś ile losowy generator liczb Twój przyniosłoby, prawda? –
@Sven Marnach: załóżmy, że generator czyta z pliku? – Jimmy
Jeśli naprawdę nie chcesz przechowywać danych (i nie implementujesz własnej wolniejszej funkcji 'sum') możesz utworzyć generator zliczający i nazwać go w ten sposób:' co = countingGen(); mean = sum (co (data))/co.getCount() ' –