96 votes

Calculer la moyenne entre les dimensions d'un tableau 2D

J'ai un tableau a comme ça :

a = [[40, 10], [50, 11]]

Je dois calculer la moyenne pour chaque dimension séparément, le résultat devrait être le suivant :

[45, 10.5]

45 étant la moyenne de a[*][0] y 10.5 la moyenne de a[*][1] .

Quelle est la manière la plus élégante de résoudre ce problème sans utiliser de boucle ?

148voto

askewchan Points 12215

a.mean() prend un axis argument :

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, comme une 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 est que c'est la syntaxe du découpage :

In [6]: a[:,0].mean() # first column
Out[6]: 45.0

In [7]: a[:,1].mean() # second column
Out[7]: 10.5

16voto

Andrew Clark Points 77748

Voici une solution non-numpy :

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

6voto

NPE Points 169956

Si vous faites ça souvent, NumPy est la voie à suivre.

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]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X