Grundsätzlich besteht die Transponierungsfunktion darin, die Form und die Schritte des Arrays zu vertauschen:
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
Im Fall eines 1D-Numpy-Arrays (Rang-1-Array) sind Form und Schritte 1-Element-Tupel und können nicht ausgetauscht werden, und die Transponierung eines solchen 1D-Arrays gibt sie unverändert zurück. Stattdessen können Sie einen "Zeilenvektor" (numpy Array of Shape (1, n)
) in einen "Spaltenvektor" (numpy Array of Shape (n, 1)
) transponieren . Um dies zu erreichen, müssen Sie zuerst Ihr 1D-Numpy-Array in einen Zeilenvektor konvertieren und dann die Form und die Schritte vertauschen (transponieren). Unten ist eine Funktion, die es tut:
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
Beispiel:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
Natürlich müssen Sie dies nicht auf diese Weise tun, da Sie ein 1D-Array haben und es (n, 1)
durch a.reshape((-1, 1))
oder direkt in ein Array umformen können a[:, None]
. Ich wollte nur zeigen, wie das Transponieren eines Arrays funktioniert.