2015-10-13 10 views
6

Ich habe Schwierigkeiten zu verstehen, wie numpy.transpose tatsächlich funktioniert. Zum BeispielWie funktioniert numpy.transpose in diesem Beispiel?

a_value = array([[[0, 1], 
        [2, 3]], 

       [[4, 5], 
        [6, 7]]]) 

und wenn ich

np.transpose(a_value, (2, 1, 0)) 

bekomme ich

array([[[0, 4], 
     [2, 6]], 

     [[1, 5], 
     [3, 7]]]) 

Wie kann ich manuell diese transponieren ableiten? Ich muss die Formel oder die Schritte intuitiv im obigen Fall verstehen, damit ich sie für höhere Dimensionen verallgemeinern kann. Liste der ints, optional standardmäßig umgekehrt die Abmessungen, sonst permutieren die Achsen entsprechend den angegebenen Werten:

+3

Haben Sie die Dokumentation gelesen, d. H. 'Help (numpy.transpose)'? Sie "permutieren" einfach die Dimensionen. Übergeben Sie die Permutation '(2, 1, 0)', dann befindet sich das Element, das sich an der Position '[x, y, z]' 'befand, jetzt in der Position '[z, y, x]' oder in Position ' [z, x, y] 'für Permutation' (3, 0, 1) ' –

+0

Danke @tobias_k –

Antwort

12

Wie in den

numpy.transpose(a, axes=None)

Achsen documentation -

gegeben.

Das zweite Argument sind die Achsen, mit denen die Werte permutiert werden. Das heißt, wenn der Index des Anfangselementes (x,y,z) ist (x ist 0. Achse, y ist 1. Achse und z ist 2. Achse), wird die Position dieses Elements im resultierenden Array (z, y, x) (das heißt) ist die 2. Achse zuerst, dann die 1. Achse und die letzte 0. Achse), basierend auf dem Argument, das Sie für axes angegeben haben.

Da Sie eine Reihe von Form sind zur Umsetzung (2,2,2), die transponierte Form ist auch (2,2,2) und die Positionen ändern würde, wie -

(0,0,0) -> (0,0,0) 
(1,0,0) -> (0,0,1) 
(0,1,0) -> (0,1,0) 
(1,1,0) -> (0,1,1) 
... 

Da die Achsen Sie wählen, sind trivial, lässt erklären dies für andere Achsen. Beispiel -

In [54]: A = np.arange(30).reshape((2, 3, 5)) 
In [55]: A 
Out[55]: 
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, 27, 28, 29]]]) 

In [56]: np.transpose(A,(1,2,0)) 
Out[56]: 
array([[[ 0, 15], 
     [ 1, 16], 
     [ 2, 17], 
     [ 3, 18], 
     [ 4, 19]], 

     [[ 5, 20], 
     [ 6, 21], 
     [ 7, 22], 
     [ 8, 23], 
     [ 9, 24]], 

     [[10, 25], 
     [11, 26], 
     [12, 27], 
     [13, 28], 
     [14, 29]]]) 

Hier ist das erste Element (0,0,0) wird das (0,0,0) Element im Ergebnis. Das zweite Element (0,0,1) wird das (0,1,0) Element im Ergebnis. Und so weiter -

(0,0,0) -> (0,0,0) 
(0,0,1) -> (0,1,0) 
(0,0,2) -> (0,2,0) 
... 
(2,3,4) -> (3,4,2) 
... 
+0

Danke für die einfache Erklärung. –

Verwandte Themen