J'ai un tableau a
comme ceci:
a = [[40, 10], [50, 11]]
Je dois calculer la moyenne pour chaque dimension séparément, le résultat devrait être ceci:
[45, 10.5]
45
étant la moyenne de a[*][0]
et 10.5
la moyenne de a[*][1]
.
Quel est le moyen le plus élégant de résoudre ce problème sans utiliser de boucle?
a.mean()
prend un argument axis
:
In [1]: import numpy as np
In [2]: a = np.array([[40, 10], [50, 11]])
In [3]: a.mean(axis=1) # to take the mean of each row
Out[3]: array([ 25. , 30.5])
In [4]: a.mean(axis=0) # to take the mean of each col
Out[4]: array([ 45. , 10.5])
Ou, en tant que fonction autonome:
In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. , 30.5])
La raison pour laquelle votre découpage ne fonctionnait pas, c'est parce que c'est la syntaxe de découpage:
In [6]: a[:,0].mean() # first column
Out[6]: 45.0
In [7]: a[:,1].mean() # second column
Out[7]: 10.5
Voici une solution non-numpy:
>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in Zip(*a)]
[45.0, 10.5]
Si vous faites cela souvent, NumPy est le chemin à parcourir.
Si pour une raison quelconque vous ne pouvez pas utiliser NumPy:
>>> map(lambda x:sum(x)/float(len(x)), Zip(*a))
[45.0, 10.5]