
Verwenden Sie zum Transponieren des NumPy-Arrays ndarray (Vertauschen von Zeilen und Spalten) das T-Attribut (.T), die ndarray-Methode transpose() und die Funktion numpy.transpose().
Mit ndarray.transpose() und numpy.transpose() can SIE nicht nur ein 2D-Array (Matrix) transponieren, sondern auch die Achsen eines mehrdimensionalen Arrays in beliebiger Reihenfolge neu anordnen.
Dieser Artikel hat folgenden Inhalt.
- Zweidimensionales Array (Matrix) transponieren
- T-Attribut
- ndarray.transpose()
- np. transponieren ()
- 1D-Array und Zeilenvektor, Spaltenvektor
- Achsen eines mehrdimensionalen Arrays tauschen (3D oder höher)
- Standardergebnis
- Achsenreihenfolge mit transpose() angeben
- Beispiel: Mehrere Matrizen gleichzeitig transponieren
Wenn Sie Zeilen und Spalten von pandas.DataFrame oder einer zweidimensionalen Liste (Liste von Listen) tauschen möchten, lesen Sie den following Artikel.
Zweidimensionales Array (Matrix) transponieren
T-Attribut
Sie können die transponierte Matrix des ursprünglichen zweidimensionalen Arrays (Matrix) mit dem T-Attribut erhalten.
import numpy as np
a_2d = np.arange(6).reshape(2, 3)
print(a_2d)
# [[0 1 2]
# [3 4 5]]
a_2d_T = a_2d.T
print(a_2d_T)
# [[0 3]
# [1 4]
# [2 5]]
Das T-Attribut gibt eine Ansicht des ursprünglichen Arrays zurück, und das ändert sich das andere.
Sie können mit np.shares_memory() prüfen, ob ndarray auf Daten im selben Speicher verweist.
print(np.shares_memory(a_2d, a_2d_T))
# True
a_2d_T[0, 1] = 100
print(a_2d_T)
# [[ 0 100]
# [ 1 4]
# [ 2 5]]
print(a_2d)
# [[ 0 1 2]
# [100 4 5]]
a_2d[1, 0] = 3
print(a_2d)
# [[0 1 2]
# [3 4 5]]
print(a_2d_T)
# [[0 3]
# [1 4]
# [2 5]]
Wenn Sie es als separate Daten verarbeiten möchten, erstellen Sie eine Kopie mit copy().
a_2d_T_copy = a_2d.T.copy()
print(a_2d_T_copy)
# [[0 3]
# [1 4]
# [2 5]]
print(np.shares_memory(a_2d, a_2d_T_copy))
# False
a_2d_T_copy[0, 1] = 100
print(a_2d_T_copy)
# [[ 0 100]
# [ 1 4]
# [ 2 5]]
print(a_2d)
# [[0 1 2]
# [3 4 5]]
ndarray.transpose()
transpose() wird als Methode von ndarray bereitgestellt. Wie bei T WIRD sterben Ansicht zurückgegeben.
print(a_2d.transpose())
# [[0 3]
# [1 4]
# [2 5]]
print(np.shares_memory(a_2d, a_2d.transpose()))
# True
np. transponieren ()
Die Funktion numpy.transpose() ist ebenfalls vorhanden. Geben Sie das ursprüngliche Array für das erste Argument an. Dies gibt auch eine Ansicht zurück.
print(np.transpose(a_2d))
# [[0 3]
# [1 4]
# [2 5]]
print(np.shares_memory(a_2d, np.transpose(a_2d)))
# True
1D-Array und Zeilenvektor, Spaltenvektor
Das Anwenden von T oder transpose() auf ein eindimensionales Array gibt nur ein Array zurück, das dem ursprünglichen Array entspricht.
a_1d = np.arange(3)
print(a_1d)
# [0 1 2]
print(a_1d.T)
# [0 1 2]
print(a_1d.transpose())
# [0 1 2]
print(np.transpose(a_1d))
# [0 1 2]
Eine Matrix mit nur einer Zeile wird als Zeilenvektor und eine Matrix mit einer Spalte als Spaltenvektor bezeichnet, aber in einem eindimensionalen Array von ndarray wird nicht zwischen Zeilen und Spalten unterschieden.
Ein zweidimensionales Array WIRD verwendet, um klar anzuzeigen, dass nur Zeilen oder Spalten vorhanden sind.
Transformieren Sie hier die Form mit reshape().
a_row = a_1d.reshape(1, -1)
print(a_row)
# [[0 1 2]]
print(a_row.shape)
# (1, 3)
print(a_row.ndim)
# 2
a_col = a_1d.reshape(-1, 1)
print(a_col)
# [[0]
# [1]
# [2]]
print(a_col.shape)
# (3, 1)
print(a_col.ndim)
# 2
Wie oben erwähnt, können zweidimensionale Arrays transponiert werden.
print(a_row.T)
# [[0]
# [1]
# [2]]
print(a_col.T)
# [[0 1 2]]
Achsen eines mehrdimensionalen Arrays tauschen (3D oder höher)
Standardergebnis
T, transpose() kann auf mehrdimensionale Arrays von 3D oder höher angewendet werden.
Das Standardergebnis ist wie folgt. np.transpose() hat das gleiche Ergebnis.
a_3d = np.arange(24).reshape(2, 3, 4)
print(a_3d)
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
print(a_3d.T)
# [[[ 0 12]
# [ 4 16]
# [ 8 20]]
#
# [[ 1 13]
# [ 5 17]
# [ 9 21]]
#
# [[ 2 14]
# [ 6 18]
# [10 22]]
#
# [[ 3 15]
# [ 7 19]
# [11 23]]]
print(a_3d.T.shape)
# (4, 3, 2)
print(a_3d.transpose())
# [[[ 0 12]
# [ 4 16]
# [ 8 20]]
#
# [[ 1 13]
# [ 5 17]
# [ 9 21]]
#
# [[ 2 14]
# [ 6 18]
# [10 22]]
#
# [[ 3 15]
# [ 7 19]
# [11 23]]]
print(a_3d.transpose().shape)
# (4, 3, 2)
Es ist schwer zu verstehen, wenn man sich nur das Ausgabeergebnis ansieht, aber die Reihenfolge der Achse (Dimension) von (0. Achse, 1. Achse, 2. Achse) ist umgekehrt wie (2. Achse, 1. Achse, 0. Achse).
In einem 2D-Array wird die Reihenfolge (0. Achse, 1. Achse) = (Zeile, Spalte) in die Reihenfolge (1. Achse, 0. Achse) = (Spalte, Zeile) geändert.
Achsenreihenfolge mit transpose() angeben
Die Verwendung von T kehrt die Reihenfolge immer um, aber Sie können jede beliebige Reihenfolge mit transpose() angeben.
Geben Sie umgekehrt im folgenden Beispiel dieselbe Reihenfolge als Standard an und vergewissern Sie sich, dass sich das Ergebnis nicht ändert.
Geben Sie in der ndarray-Methode transpose() die Achsenreihenfolge mit Argumenten variabler Länge oder einem Tupel an.
print(a_3d.transpose(2, 1, 0))
# [[[ 0 12]
# [ 4 16]
# [ 8 20]]
#
# [[ 1 13]
# [ 5 17]
# [ 9 21]]
#
# [[ 2 14]
# [ 6 18]
# [10 22]]
#
# [[ 3 15]
# [ 7 19]
# [11 23]]]
print(a_3d.transpose(2, 1, 0).shape)
# (4, 3, 2)
print(a_3d.transpose((2, 1, 0)).shape)
# (4, 3, 2)
Geben Sie in np.transpose() die Reihenfolge als zweites Argument mit Tupel an. Es kann nicht mit Argumenten variabler Länge angegeben werden.
print(np.transpose(a_3d, (2, 1, 0)))
# [[[ 0 12]
# [ 4 16]
# [ 8 20]]
#
# [[ 1 13]
# [ 5 17]
# [ 9 21]]
#
# [[ 2 14]
# [ 6 18]
# [10 22]]
#
# [[ 3 15]
# [ 7 19]
# [11 23]]]
print(np.transpose(a_3d, (2, 1, 0)).shape)
# (4, 3, 2)
# print(np.transpose(a_3d, 2, 1, 0))
# TypeError: transpose() takes from 1 to 2 positional arguments but 4 were given
Ein Fehler wird ausgelöst, wenn die Anzahl der angegebenen Achsen nicht mit der Anzahl der Dimensionen des ursprünglichen Arrays gefunden wird oder wenn eine nicht vorhandene Dimension angegeben wird.
# print(a_3d.transpose(0, 1))
# ValueError: axes don't match array
# print(a_3d.transpose(0, 1, 2, 3))
# ValueError: axes don't match array
# print(a_3d.transpose(0, 1, 3))
# AxisError: axis 3 is out of bounds for array of dimension 3
Beispiel: Mehrere Matrizen gleichzeitig transponieren
Beispiel ist transpose() nützlich, wenn ein 3D-Array eine Gruppe von 2D-Arrays ist.
Wenn die Daten von Matrizen als 3D-Formarray (n, Reihe, Spalte) gespeichert werden, can alle Matrizen wie folgt transponiert Werden.
print(a_3d)
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
print(a_3d.shape)
# (2, 3, 4)
print(a_3d.transpose(0, 2, 1))
# [[[ 0 4 8]
# [ 1 5 9]
# [ 2 6 10]
# [ 3 7 11]]
#
# [[12 16 20]
# [13 17 21]
# [14 18 22]
# [15 19 23]]]
print(a_3d.transpose(0, 2, 1).shape)
# (2, 4, 3)
Wenn die Form (Zeile, Spalte, n) ist, can SIE wie folgt vorgehen.
print(a_3d.transpose(1, 0, 2))
# [[[ 0 1 2 3]
# [12 13 14 15]]
#
# [[ 4 5 6 7]
# [16 17 18 19]]
#
# [[ 8 9 10 11]
# [20 21 22 23]]]
print(a_3d.transpose(1, 0, 2).shape)
# (3, 2, 4)
print(a_3d[:, :, 0])
# [[ 0 4 8]
# [12 16 20]]
print(a_3d.transpose(1, 0, 2)[:, :, 0])
# [[ 0 12]
# [ 4 16]
# [ 8 20]]