it-swarm.com.de

Wie wird die Achse in Numpys Array indiziert?

Ab Numpys Tutorial kann die Achse mit ganzen Zahlen indiziert werden, wie 0 Für die Spalte, 1 Für die Zeile, aber ich verstehe nicht, warum sie dies indiziert werden Weg? Und wie finde ich den Index jeder Achse heraus, wenn ich mit einem mehrdimensionalen Array arbeite?

59
Alcott

Per Definition ist die Achsennummer 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 beispielsweise ein 2D-Array a eine Form (5,6) hat, können Sie auf a[0,0] Bis zu a[4,5] Zugreifen. 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 in Bezug auf die beteiligten Formen und Indizes zu betrachten.

Wenn Sie beispielsweise .sum(axis=n) ausführen, wird die Dimension n reduziert und gelöscht, wobei jeder Wert in der neuen Matrix der Summe der entsprechenden reduzierten Werte entspricht. Wenn beispielsweise b die Form (5,6,7,8) Hat und Sie c = b.sum(axis=2) ausführen, wird Achse 2 (Dimension mit Größe 7) reduziert und das Ergebnis hat die Form (5,6,8). Außerdem ist c[x,y,z] Gleich der Summe aller Elemente b[x,y,:,z].

103
nneonneo

Wenn überhaupt jemand diese visuelle Beschreibung braucht:

Numpy array axis 0 and 1

20
debaonline4u

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 mit einer Form mit verschiedenen Werten erstellt (4,2,3), Damit Sie die Struktur klar erkennen können. Unterschiedliche Achse bedeutet unterschiedliche "Schicht".

Das heißt, axis = 0 Indiziert die erste Dimension der Form (4,2,3). Es bezieht sich auf die Arrays im ersten []. Es sind 4 Elemente enthalten, daher hat es die 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 Indiziert die zweite Dimension in Form (4,2,3). In jedem Array der Ebene befinden sich 2 Elemente: axis = 0, E.c. In der Reihe von

 array[[1, 2, 3],
       [2, 2, 3]]

. Die zwei Elemente sind:

array[1, 2, 3]

array[2, 2, 3]

Der dritte Formwert bedeutet, dass jedes Array-Element der Ebene drei Elemente enthält: axis = 2. e.c. Es gibt 3 Elemente in array[1, 2, 3]. Das ist explizit.

Außerdem können Sie die Achse/Bemaßung an der Nummer [] Am Anfang oder am Ende erkennen. In diesem Fall ist die Zahl 3 ([[[). Sie können also axis aus axis = 0, axis = 1 Und axis = 2 Auswählen.

10
Lyn

Im Allgemeinen bedeutet Achse = 0, dass alle Zellen mit der ersten Dimension sich mit jedem Wert der zweiten Dimension, der dritten Dimension usw. ändern

Beispielsweise hat ein zweidimensionales Array zwei entsprechende Achsen: die erste verläuft vertikal nach unten über Zeilen (Achse 0) und die zweite verläuft horizontal über Spalten (Achse 1).

Für 3D wird es komplex, verwenden Sie also 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]]))
5
ndas