Es scheint, dass die Frage und das Beispiel aus dem Buch Python for Data Analysis von Wes McKinney stammen. Diese Funktion von transpose
wird in Kapitel 4.1 erwähnt. Transponieren von Arrays und Vertauschen von Achsen .
transpose
Akzeptiert für höherdimensionale Arrays ein Tupel von Achsnummern, um die Achsen zu permutieren (für zusätzliche Gedankenbiegung).
Hier bedeutet "permutieren" "neu anordnen", also die Reihenfolge der Achsen neu anordnen.
Die Zahlen in .transpose(1, 0, 2)
bestimmen, wie die Reihenfolge der Achsen im Vergleich zum Original geändert wird. Mit verwenden .transpose(1, 0, 2)
wir "Ändern Sie die 1. Axt mit der 2 .." Wenn wir verwenden .transpose(0, 1, 2)
, bleibt das Array gleich, da nichts geändert werden muss. Dies ist die Standardreihenfolge.
Das Beispiel im Buch mit einem (2, 2, 4)
Array mit einer Größe ist nicht sehr klar, da die 1. und 2. Achse dieselbe Größe haben. Das Endergebnis scheint sich also nur durch die Neuordnung der Zeilen arr[0, 1]
und zu ändern arr[1, 0]
.
Wenn wir ein anderes Beispiel mit einem dreidimensionalen Array versuchen, wobei jede Dimension eine andere Größe hat, wird der Umlagerungsteil klarer.
In [2]: x = np.arange(24).reshape(2, 3, 4)
In [3]: x
Out[3]:
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]]])
In [4]: x.transpose(1, 0, 2)
Out[4]:
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
Hier sind die ursprünglichen Arraygrößen (2, 3, 4)
. Wir haben den 1. und 2. geändert, damit er (3, 2, 4)
größer wird. Wenn wir genauer hinschauen, um zu sehen, wie die Umlagerung genau passiert ist; Zahlenfelder scheinen sich in einem bestimmten Muster geändert zu haben. Unter Verwendung der Papieranalogie von @ RobertB hätten wir jetzt ein Array der Größe 3x2x4 , wenn wir die 2 Zahlenblöcke nehmen und jedes auf Blätter schreiben und dann eine Zeile von jedem Blatt nehmen würden, um eine Dimension des Arrays zu konstruieren Zählen von der äußersten bis zur innersten Schicht.
[ 0, 1, 2, 3] \ [12, 13, 14, 15]
[ 4, 5, 6, 7] \ [16, 17, 18, 19]
[ 8, 9, 10, 11] \ [20, 21, 22, 23]
Es könnte eine gute Idee sein, mit Arrays unterschiedlicher Größe zu spielen und verschiedene Achsen zu ändern, um eine bessere Vorstellung davon zu erhalten, wie es funktioniert.