web-dev-qa-db-fra.com

Calculer la moyenne entre les dimensions dans un tableau 2D

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?

63
otmezger

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
97
askewchan

Voici une solution non-numpy:

>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in Zip(*a)]
[45.0, 10.5]
8
Andrew Clark

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]
4
NPE