Sto facendo un lavoro di statistica, ho una (grande) collezione di numeri casuali per calcolare la media di, mi piacerebbe lavorare con i generatori, perché ho solo bisogno di calcolare il significa, quindi non ho bisogno di memorizzare i numeri.media di calcolo in python per un generatore
Il problema è che numpy.mean si interrompe se si passa un generatore. Posso scrivere una semplice funzione per fare ciò che voglio, ma mi chiedo se c'è un modo corretto e integrato per farlo?
Sarebbe bello se potessi dire "somma (valori)/len (valori)", ma len non funziona per i genetator e somma i valori già consumati.
Ecco un esempio:
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)
questi sia dare la stessa, giusta, risposta, acquistare my_mean non funziona per le liste, e numpy.mean non funziona per i generatori.
Mi piace molto l'idea di lavorare con i generatori, ma dettagli come questo sembrano rovinare le cose.
sapresti quanti numeri casuali il generatore produrrebbe, non è vero? –
@Sven Marnach: supponiamo che il generatore stia leggendo da un file? – Jimmy
Se si vuole davvero non archiviare i dati (e non implementare la propria funzione 'sum' più lenta) è possibile creare un generatore di conteggio e chiamarlo in questo modo:' co = countingGen(); mean = sum (co (data))/co.getCount() ' –