Summe entlang der Achse im numply-Array

8

Ich möchte verstehen, wie diese ndarray.sum (axis =) funktioniert. Ich weiß, dass Achse = 0 ist für Spalten und Achse = 1 ist für Zeilen. Aber im Falle von 3 Dimensionen (3 Achsen) ist es schwierig, das Ergebnis unten zu interpretieren.

%Vor%

Hier in diesem Beispiel von 3-Achsen-Array der Form (2,3,5) gibt es 3 Zeilen und 5 Spalten. Aber wenn ich dieses Array als Ganzes betrachte, scheint es nur zwei Zeilen zu sein (beide mit 3 Array-Elementen).

Kann jemand bitte erklären, wie diese Summe auf einem Array von 3 oder mehr Achsen (Dimensionen) funktioniert.

    
Tarun Kumar 19.01.2017, 03:56
quelle

6 Antworten

3

numpy zeigt ein (2,3,5) Array als 2 Blöcke von 3x5 Arrays an (3 Zeilen, 5 Spalten). Oder nenne sie "Flugzeuge" (MATLAB würde es als 5 Blöcke von 2x3 anzeigen).

Die Anzeige numpy entspricht auch einer verschachtelten Liste - einer Liste von zwei Unterlisten; jeweils mit 3 Unterlisten. Jeder von diesen ist 5 Elemente lang.

Im Fall 3x5 2d summiert Achse 0 entlang der 3 -Dimension, was zu einem Array mit 5 Elementen führt. Die Beschreibungen "Summe über Zeilen" oder "Summe entlang Spalten" sind auf Englisch etwas vage. Konzentrieren Sie sich auf die Ergebnisse, die Veränderung der Form und welche Werte addiert werden, nicht auf die Beschreibung.

Zurück zum 3D-Fall:

Mit axis=0 summiert es sich entlang der 1. Dimension, entfernt es effektiv und hinterlässt uns eine 3x5-Matrix. 0+15=16, 1+16=17 etc .

Achse 1, verdichtet die Größe 3 Dimension, Ergebnis ist 2x5. 0+5+10=15, etc .

Achse 2, verdichten Sie die Größe 5 dimenson, Ergebnis ist 2x3, sum((0,1,2,3,4))

Ihr Beispiel ist gut, da die drei Dimensionen unterschiedlich sind und es einfacher ist zu sehen, welcher während der Summe eliminiert wurde.

Mit 2d gibt es einige Mehrdeutigkeiten; "Summe über Zeilen" - bedeutet das, dass die Zeilen gelöscht oder beibehalten werden? Mit 3d gibt es keine Mehrdeutigkeit; mit Achse = 0, können Sie es nur entfernen, die anderen 2 lassen.

    
hpaulj 19.01.2017, 05:09
quelle
4

Wenn Sie die Dimensionen beibehalten möchten, können Sie keepdims :

angeben %Vor%

Andernfalls wird die Achse, die Sie summieren, aus der Form entfernt. Eine einfache Möglichkeit, dies zu verfolgen, ist die Verwendung der numpy.ndarray.shape Eigenschaft:

%Vor%

Sie können auch mehrere Achsen addieren, wenn Sie möchten (die Dimensionalität wird um die angegebene Achse reduziert):

%Vor%     
MSeifert 19.01.2017 04:08
quelle
2

Hier ist ein anderer Weg, dies zu interpretieren. Sie können ein mehrdimensionales Array als Tensor betrachten, T[i][j][k] , während i, j, k die Achse 0,1,2 darstellt.

T.sum(axis = 0) entspricht mathematisch:

Ähnlich, T.sum(axis = 1) :

Und, T.sum(axis = 2) :

Also wird in einem anderen Wort die Achse summiert, zum Beispiel axis = 0 , der erste Index wird summiert. Wenn in eine for-Schleife geschrieben:

%Vor%

für axis = 1 :

%Vor%

usw.

    
Psidom 19.01.2017 04:14
quelle
0

Die angegebene Achse ist diejenige, die effektiv entfernt wird. Bei einer Form von (2,3,5) ergibt Achse 0 (3,5) , Achse 1 (2,5) usw. Dies erstreckt sich auf beliebig viele Dimensionen.

    
John Zwinck 19.01.2017 03:59
quelle
0

Sie scheinen von dem Ausgabestil von numperigen Arrays verwirrt zu sein. Die "Zeile" der Ausgabe ist fast immer der letzte Index, nicht der erste. Beispiel:

%Vor%

Beachten Sie die Zehnerstellen in der Zeile, nicht die Spalte, obwohl y der zweite Index ist.

%Vor%

Nun wird die Stelle des Hunderts in der Reihe erhöht, obwohl z der letzte Index ist. Dies kann für Anfänger etwas kontraintuitiv sein.

Wenn Sie also np.sum(x,index=-1) ausführen, werden Sie immer über die "Zeilen" summieren, wie im Format np.array([]) gezeigt. Betrachten wir arr.sum(axis=2)[0,0] , das ist 0+1+2+3+4=10 .

    
Daniel F 19.01.2017 07:08
quelle
0

Stellen Sie sich ein mehrdimensionales Array als Baum vor. Jede Dimension ist eine Ebene im Baum. Jede Gruppierung auf dieser Ebene ist ein Knoten. Eine Summe entlang einer bestimmten Achse (sagen wir Achse = 4) bedeutet das Zusammenfügen (Überlagern) aller Knoten auf dieser Ebene zu einem einzigen Knoten (unter ihren jeweiligen Eltern). Unterbäume, die auf den überlagerten Knoten auf dieser Ebene verwurzelt sind, werden übereinander gestapelt. Die Werte aller überlappenden Knoten werden addiert.
Bild: Ссылка

    
Ananth Raghuraman 28.09.2017 17:47
quelle