概要
この記事は、忘れっぽい筆者のためのメモです。
知らない人もいるかもしれないので、ぜひ読んでみてください。
3次元以上の np.array を操作するとき
形が (5,6,7) となっている変数の軸を入れ替えて、(6,7,5) にしたいとき、あなたならどうしますか?
つまり、次のように軸を入れ替えたいわけです。
5:0軸→2軸
6:1軸→0軸
7:2軸→1軸
間違った答え
賢明なみなさんなら間違えないと思いますが、私は間違えました。
次のコードは、間違いです。
import numpy as np
a = np.zeros((5,6,7))
a = a.transpose(2,0,1)
print(a.shape) # (7,5,6)
形は (7,5,6) になってしまいました。
入れ替えた後の軸を指定するのは間違っています。
今まで何度も間違えました。
正しい答え
次のコードが、正解です。
import numpy as np
a = np.zeros((5,6,7))
a = a.transpose(1,2,0)
print(a.shape) # (6,7,5)
入れ替え後の軸の位置に、入れ替え前の軸を指定するのが正しいです。
ここでは、0軸=5、1軸=6、2軸=7となっており、(5,6,7) から (6,7,5) に変形したい場合は、(0軸,1軸,2軸) から (1軸,2軸,0軸)としなければなりません。
まとめ
(5,6,7) → (6,7,5) となるように軸入れ替えをするには?
よくやってしまう間違い:a.transpose(2,0,1)
(この軸は2軸に移動, この軸は0軸に移動, この軸は1軸に移動) という解釈
正解:a.transpose(1,2,0)
(元の1軸はここに移動, 元の2軸はここに移動, 元の0軸はここに移動) という解釈