Ermitteln Sie den Mittelwert eines 2D-Slices eines 3D-Arrays in numpy

8

Ich habe ein numpy Array mit einer Form von:

%Vor%

Ich möchte den Mittelwert über die 25 Elemente jeder 'Scheibe' des Arrays [0,:,:], [1,:,:] usw. berechnen und 11 Werte zurückgeben.

Es scheint albern, aber ich kann nicht herausfinden, wie das geht. Ich dachte, die Funktion mean(axis=x) würde dies tun, aber ich habe alle möglichen Achskombinationen ausprobiert und keiner von ihnen gibt mir das gewünschte Ergebnis.

Ich kann das natürlich mit einer for-Schleife und Slicing machen, aber es gibt einen besseren Weg?

    
robintw 21.08.2013, 12:10
quelle

3 Antworten

11

Verwenden Sie ein Tupel für die Achse:

%Vor%

Edit: Dies funktioniert nur mit numpy Version 1.7 +.

    
J. Martinot-Lagarde 21.08.2013, 12:39
quelle
5

Kann immer n.einsum verwenden:

%Vor%

Funktioniert auf höher dimensionalen Arrays (alle diese Methoden würden, wenn die Achsenbeschriftungen geändert werden):

%Vor%

Schneller zu booten:

%Vor%

Skaliert etwas besser als die anderen Methoden, da die Array-Größe zunimmt.

Durch die Verwendung von dtype=np.float64 werden die oben genannten Zeitpunkte nicht merklich geändert. Überprüfen Sie daher einfach Folgendes:

%Vor%

Auch etwas, das interessant ist:

%Vor%     
Daniel 21.08.2013 13:14
quelle
4

Sie können reshape(11, 25) und dann mean nur einmal (schneller) aufrufen:

%Vor%

Alternativ können Sie np.mean zweimal aufrufen (ca. 2 x langsamer auf meinem Computer):

%Vor%     
Saullo Castro 21.08.2013 12:14
quelle