2017-11-24 1 views
2

3Dマトリクスx_testのサイズは(100, 33, 66)です。サイズを(100, 66, 33)に変更したいと思います。3D行列を転置する方法は?

python3.5を使用してこれを行う最も効率的な方法は何ですか?私はこれらの線に沿って何かを探して:

y = x_test.transpose() 

答えて

3

あなたはあなたのケースnp.transpose(x_test, (0, 2, 1))に使用して関数np.transposeに所望の寸法を渡すことができます。例えば

これは今

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

を出力します

import numpy as np 

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

print(x_test) 
print(x_test.shape) 

、あなたは

[[[ 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) 
を与えるであろう

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

からのコマンドを使用して行列を転置することができます0123別にtransposeから

2

(Clebの答え@参照)swapaxesmoveaxisもあります

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]]]) 
関連する問題