2017-11-24 5 views
2

Ich habe eine 3D-Matrix x_test der Größe (100, 33, 66) und ich möchte seine Abmessungen zu (100, 66, 33) ändern.Wie wird eine 3D-Matrix transponiert?

Was ist der effizienteste Weg, dies mit python3.5 zu tun? Ich suche etwas in diese Richtung:

y = x_test.transpose() 

Antwort

3

Sie die gewünschten Abmessungen an die Funktion übergeben können np.transpose in Ihrem Fall mit np.transpose(x_test, (0, 2, 1)).

Zum Beispiel

import numpy as np 

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

print(x_test) 
print(x_test.shape) 

Diese

[[[ 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) 

Jetzt gedruckt wird, können Sie die Matrix mit dem Befehl von oben

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

transponieren, welche geben

[[[ 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) 
2

Neben transpose (siehe @ Cleb Antwort) gibt es auch swapaxes und 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]]]) 
Verwandte Themen