web-dev-qa-db-fra.com

Comment transposer une matrice 3D?

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

Quelle est la façon la plus efficace de le faire en utilisant python3.5? Je cherche quelque chose dans ce sens:

y = x_test.transpose()
9
Ajees

Vous pouvez transmettre 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)

Cela 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)
13
Cleb

Outre transpose (voir la réponse de @ Cleb), il existe également swapaxes et 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]]])
5
Paul Panzer