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.

Était-ce utile?

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]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top