【毎日Python】Pythonで配列の軸を変換する方法|numpy.transpose

Pythonで配列の軸を入れ替える方法です。
使用するのは、Pythonのnumpyライブラリのtranspose関数です。

import numpy as np

まず、このような2次元配列で試してみましょう。

a_1 = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

transpose関数の引数に配列を指定します。
実行します。
列と行の値を入れ替えることができました。  

np.transpose(a_1)

実行結果:

array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

次に、このような3次元配列で試してみましょう。

a_2 = np.array([[[1, 2, 3, 4]],
                [[5, 6, 7, 8]],
                [[9, 10, 11, 12]]])

3次元配列の軸を変更するには、第二引数に置換後の軸の順番をタプルで指定します。
元の配列は(0, 1, 2)で表され、0が次元、1が行、2が列です。この(0, 1, 2)を変換したい順に指定します。

np.transpose(a_2,(0, 1, 2))

実行結果:

array([[[1, 2, 3, 4]],
       [[5, 6, 7, 8]],
       [[9, 10, 11, 12]]])

例えば変換後の軸を(0,1,2)と指定すると、そのまま同じ配列が返ってきます。

a_2.shape

実行結果:

(3, 1, 4)
np.transpose(a_2,(0, 1, 2)).shape

実行結果:

(3, 1, 4)

shape属性で確認すると、このように3次元、1行、4列の配列であることがわかります。

np.transpose(a_2,(2, 1, 0))

実行結果:

array([[[ 1,  5,  9]],

       [[ 2,  6, 10]],

       [[ 3,  7, 11]],

       [[ 4,  8, 12]]])
np.transpose(a_2,(2, 1, 0)).shape

実行結果:

(4, 1, 3)

では、(2,1,0)と指定してみましょう。 4次元1行3列の配列に変更できました。

np.transpose(a_2,(0, 2, 1))

実行結果:

array([[[ 1],
        [ 2],
        [ 3],
        [ 4]],

       [[ 5],
        [ 6],
        [ 7],
        [ 8]],

       [[ 9],
        [10],
        [11],
        [12]]])
np.transpose(a_2,(0, 2, 1)).shape

実行結果:

(3, 4, 1)

続けて、(0,2,1)と指定してみましょう。

3次元、4行、1列の配列に変更できました。