Fondamentalement, ce que fait la fonction de transposition est d'échanger la forme et les enjambées du tableau:
>>> 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)
Dans le cas d'un tableau numpy 1D (tableau de rang 1), la forme et les enjambées sont des tuples à 1 élément et ne peuvent pas être échangés, et la transposition d'un tel tableau 1D le renvoie inchangé. Au lieu de cela, vous pouvez transposer un "vecteur-ligne" (tableau numpy de forme (1, n)
) en un "vecteur-colonne" (tableau numpy de forme (n, 1)
). Pour y parvenir, vous devez d'abord convertir votre tableau numpy 1D en vecteur de ligne, puis permuter la forme et les enjambées (transposer). Voici une fonction qui le fait:
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])
Exemple:
>>> 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]])
Bien sûr, vous n'êtes pas obligé de le faire de cette façon puisque vous avez un tableau 1D et vous pouvez directement le remodeler en (n, 1)
tableau par a.reshape((-1, 1))
ou a[:, None]
. Je voulais juste montrer comment la transposition d'un tableau fonctionne.