In Numpys Tutorial kann die Achse mit ganzen Zahlen indiziert werden, wie 0
für Spalte, 1
für Zeile, aber ich verstehe nicht, warum sie auf diese Weise indiziert werden? Und wie finde ich den Index jeder Achse heraus, wenn ich mit mehrdimensionalen Arrays fertig werde?
78
0
sollte sich auf die Zeilen und1
auf die Spalten beziehen. Ich vermute, Sie denken zB darüber nach,.sum(axis=0)
welche Summen entlang der Zeilen liegen (was zu Spaltensummen führt).Antworten:
Per Definition ist die Achsnummer der Dimension der Index dieser Dimension innerhalb des Arrays
shape
. Dies ist auch die Position, an der während der Indizierung auf diese Dimension zugegriffen wird.Wenn ein 2D-Array beispielsweise
a
die Form (5,6) hat, können Sie aufa[0,0]
bis zu zugreifena[4,5]
. Achse 0 ist somit die erste Dimension (die "Zeilen") und Achse 1 ist die zweite Dimension (die "Spalten"). Versuchen Sie in höheren Dimensionen, in denen "Zeile" und "Spalte" keinen Sinn mehr ergeben, die Achsen anhand der beteiligten Formen und Indizes zu betrachten.Wenn Sie dies
.sum(axis=n)
beispielsweise tun , wird die Dimensionn
reduziert und gelöscht, wobei jeder Wert in der neuen Matrix der Summe der entsprechenden reduzierten Werte entspricht. Wenn beispielsweiseb
eine Form vorliegt(5,6,7,8)
und Sie dies tunc = b.sum(axis=2)
, wird die Achse 2 (Bemaßung mit Größe 7) reduziert und das Ergebnis hat eine Form(5,6,8)
. Weiterhinc[x,y,z]
ist gleich der Summe aller Elementeb[x,y,:,z]
.quelle
Wenn überhaupt jemand diese visuelle Beschreibung benötigt:
quelle
Sie können die Achse folgendermaßen erfassen:
>>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]]) array([[[1, 2, 3], [2, 2, 3]], [[2, 4, 5], [1, 3, 6]], [[1, 2, 4], [2, 3, 4]], [[1, 2, 4], [1, 2, 6]]]) >>> a.shape (4,2,3)
Ich habe ein Array einer Form mit unterschiedlichen Werten erstellt,
(4,2,3)
damit Sie die Struktur klar erkennen können. Unterschiedliche Achsen bedeuten unterschiedliche "Ebenen".Das heißt,
axis = 0
indizieren Sie die erste Dimension der Form(4,2,3)
. Es bezieht sich auf die Arrays im ersten[]
. Es gibt 4 Elemente, also ist seine Form 4:array[[1, 2, 3], [2, 2, 3]], array[[2, 4, 5], [1, 3, 6]], array[[1, 2, 4], [2, 3, 4]], array[[1, 2, 4], [1, 2, 6]]
axis = 1
Indizieren Sie die zweite Dimension in Form(4,2,3)
. In jedem Array der Ebene befinden sich 2 Elemente :axis = 0
, ec Im Array vonarray[[1, 2, 3], [2, 2, 3]]
. Die zwei Elemente sind:
array[1, 2, 3] array[2, 2, 3]
Und der dritte Formwert bedeutet, dass jedes Array-Element der Ebene 3 Elemente enthält :
axis = 2
. ec Es gibt 3 Elemente inarray[1, 2, 3]
. Das ist explizit.Außerdem können Sie die Achse / Abmessungen anhand der Anzahl
[]
am Anfang oder am Ende erkennen. In diesem Fall ist die Zahl 3 ([[[
), so können Sie wählenaxis
ausaxis = 0
,axis = 1
undaxis = 2
.quelle
Im Allgemeinen bedeutet Achse = 0, dass alle Zellen mit der ersten Dimension mit jedem Wert der 2. Dimension und 3. Dimension usw. variieren
Beispielsweise hat ein zweidimensionales Array zwei entsprechende Achsen: Die erste verläuft vertikal nach unten über Zeilen (Achse 0) und die zweite horizontal über Spalten (Achse 1).
Für 3D wird es komplex. Verwenden Sie daher mehrere for-Schleifen
>>> x = np.array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]) >>> x.shape #(3, 3, 3) #axis = 0 >>> for j in range(0, x.shape[1]): for k in range(0, x.shape[2]): print( "element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ]) ... element = (0, 0) [0, 9, 18] #sum is 27 element = (0, 1) [1, 10, 19] #sum is 30 element = (0, 2) [2, 11, 20] element = (1, 0) [3, 12, 21] element = (1, 1) [4, 13, 22] element = (1, 2) [5, 14, 23] element = (2, 0) [6, 15, 24] element = (2, 1) [7, 16, 25] element = (2, 2) [8, 17, 26] >>> x.sum(axis=0) array([[27, 30, 33], [36, 39, 42], [45, 48, 51]]) #axis = 1 for i in range(0, x.shape[0]): for k in range(0, x.shape[2]): print( "element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ]) element = (0, 0) [0, 3, 6] #sum is 9 element = (0, 1) [1, 4, 7] element = (0, 2) [2, 5, 8] element = (1, 0) [9, 12, 15] element = (1, 1) [10, 13, 16] element = (1, 2) [11, 14, 17] element = (2, 0) [18, 21, 24] element = (2, 1) [19, 22, 25] element = (2, 2) [20, 23, 26] # for sum, axis is the first keyword, so we may omit it, >>> x.sum(0), x.sum(1), x.sum(2) (array([[27, 30, 33], [36, 39, 42], [45, 48, 51]]), array([[ 9, 12, 15], [36, 39, 42], [63, 66, 69]]), array([[ 3, 12, 21], [30, 39, 48], [57, 66, 75]]))
quelle