Comment en moyenne certaines sous-sections de taille d'une liste en python?
Question
Je voudrais prendre bouchées d'une liste (ou un tableau) d'une certaine taille, le retour à la moyenne pour cette morsure, puis passer à la prochaine bouchée et faire tout recommencer. Est-il possible de le faire sans écrire une boucle?
In [1]: import numpy as np
In [2]: x = range(10)
In [3]: np.average(x[:4])
Out[3]: 1.5
In [4]: np.average(x[4:8])
Out[4]: 5.5
In [5]: np.average(x[8:])
Out[5]: 8.5
Je cherche quelque chose comme, np.average (x [: Bitesize = 4]) pour revenir. [1.5,5.5,8.5]
Je l'ai regardé trancher des réseaux et des réseaux à travers le renforcement, mais je ne l'ai pas trouvé quelque chose qui fait quelque chose comme je veux voir se produire.
La solution
[np.average(x[i:i+4]) for i in xrange(0, len(x), 4) ]
Autres conseils
Utilisation numpy, vous pouvez utiliser np.average
avec le mot-clé axis
:
import numpy as np
x=np.arange(12)
y=x.reshape(3,4)
print(y)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.average(y,axis=1))
# [ 1.5 5.5 9.5]
Notez que pour remodeler x
, je devais faire x
commencer par une longueur divisible par la taille du groupe (dans ce cas, 4).
Si la longueur de x
n'est pas divisible par la taille du groupe, pourrait alors créer un tableau masqué et utiliser np.ma.average
pour calculer la moyenne appropriée.
Par exemple,
x=np.ma.arange(12)
y=x.reshape(3,4)
mask=(x>=10)
y.mask=mask
print(y)
# [[0 1 2 3]
# [4 5 6 7]
# [8 9 -- --]]
print(np.ma.average(y,axis=1))
# [1.5 5.5 8.5]