10 votes

Comment transposer une matrice 3D ?

J'ai une matrice 3D x_test de taille (100, 33, 66) et je veux changer ses dimensions en (100, 66, 33) .

Quel est le moyen le plus efficace de faire cela en utilisant python3.5 ? Je cherche quelque chose de ce genre :

y = x_test.transpose()

17voto

Cleb Points 9410

Vous pouvez passer les dimensions souhaitées à la fonction np.transpose en utilisant dans votre cas np.transpose(x_test, (0, 2, 1)) .

Par exemple,

import numpy as np

x_test = np.arange(30).reshape(3, 2, 5)

print(x_test)
print(x_test.shape)

Ceci imprimera

[[[ 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]]]
(3, 2, 5)

Maintenant, vous pouvez transposer la matrice avec la commande ci-dessus

y = np.transpose(x_test, (0, 2, 1))
print(y)
print(y.shape)

ce qui donnera

[[[ 0  5]
  [ 1  6]
  [ 2  7]
  [ 3  8]
  [ 4  9]]

 [[10 15]
  [11 16]
  [12 17]
  [13 18]
  [14 19]]

 [[20 25]
  [21 26]
  [22 27]
  [23 28]
  [24 29]]]
(3, 5, 2)

5voto

Paul Panzer Points 30707

En dehors de transpose (voir la réponse de @Cleb), il y a aussi swapaxes y moveaxis :

import numpy as np
mock = np.arange(30).reshape(2,3,5)

mock.swapaxes(1,2)
# array([[[ 0,  5, 10],
    [ 1,  6, 11],
    [ 2,  7, 12],
    [ 3,  8, 13],
    [ 4,  9, 14]],

   [[15, 20, 25],
    [16, 21, 26],
    [17, 22, 27],
    [18, 23, 28],
    [19, 24, 29]]])
np.moveaxis(mock,2,1)
# array([[[ 0,  5, 10],
    [ 1,  6, 11],
    [ 2,  7, 12],
    [ 3,  8, 13],
    [ 4,  9, 14]],

   [[15, 20, 25],
    [16, 21, 26],
    [17, 22, 27],
    [18, 23, 28],
    [19, 24, 29]]])

0voto

narratorjay Points 3

Np.rot90 est une autre option. J'avoue ne pas encore comprendre la notation axes = (a, b) et trier toutes les combinaisons de (0, 1) à (2, 1) pour trouver ce que je veux. En utilisant le x_test ci-dessus, notez sa forme originale (3, 2 ,5) :

x2 = np.rot90(x_test, axes = (0, 1))

array([[[ 5,  6,  7,  8,  9],
    [15, 16, 17, 18, 19],
    [25, 26, 27, 28, 29]],

   [[ 0,  1,  2,  3,  4],
    [10, 11, 12, 13, 14],
    [20, 21, 22, 23, 24]]])

x2.shape
(2, 3, 5)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X