2013-04-04 6 views
43

ich ein Array haben a wie folgt aus:berechnen über Dimension in einem 2D-Array bedeuten

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

Ich muss separat den Mittelwert für jede Dimension berechnen, sollte das Ergebnis sein:

[45,10.5] 

45 ist der Mittelwert von a[*][0] und 10.5 der Mittelwert von `a [*] [1].

Was ist die eleganteste Art, dies zu lösen, ohne zu einer Schleife zu gehen?

Antwort

63

a.mean() nimmt ein 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]) 

Oder als eigenständige Funktion:

In [5]: np.mean(a, axis=1) 
Out[5]: array([ 25. , 30.5]) 

Der Grund Ihrer Slicing nicht funktioniert, weil dies die Syntax für Slicing ist:

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

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

Dank für Ihre schnelle Antwort. Was bedeutet 'In [n]:'? ist dieser Teil des Codes? – otmezger

+0

Das ist, weil ich [IPython] (http://ipython.org/) verwende. – askewchan

+0

Ich benutze numpy, so Linie 2 und 3 funktioniert gut, aber mit 'Achse = 0' anstelle von 'Achse = 1' – otmezger

3

Wenn Sie dies tun, NumPy ist der Weg zu gehen.

Wenn aus irgendeinem Grund nicht NumPy verwenden:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a)) 
[45.0, 10.5] 
7

Hier ist eine nicht-numpy Lösung:

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