Ich habe eine (große) Sammlung von Zufallszahlen, aus denen ich den Mittelwert berechnen möchte. Ich möchte mit Generatoren arbeiten, weil ich nur den Mittelwert berechnen muss, also brauche ich die Zahlen nicht zu speichern.
Das Problem ist, dass numpy.mean nicht funktioniert, wenn man ihm einen Generator übergibt. Ich kann eine einfache Funktion schreiben, um das zu tun, was ich will, aber ich frage mich, ob es einen richtigen, eingebauten Weg gibt, dies zu tun?
Es wäre schön, wenn ich sagen könnte "Summe(Werte)/len(Werte)", aber len funktioniert nicht für Genetatoren, und Summe hat bereits Werte verbraucht.
Hier ist ein Beispiel:
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)
Beide geben die gleiche, korrekte Antwort: my_mean funktioniert nicht für Listen, und numpy.mean funktioniert nicht für Generatoren.
Die Idee, mit Generatoren zu arbeiten, gefällt mir wirklich gut, aber Details wie dieses scheinen die Sache zu verderben.