0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

np.transposeにおける勘違い

Last updated at Posted at 2019-10-22

概要

この記事は、忘れっぽい筆者のためのメモです。
知らない人もいるかもしれないので、ぜひ読んでみてください。

3次元以上の np.array を操作するとき

形が (5,6,7) となっている変数の軸を入れ替えて、(6,7,5) にしたいとき、あなたならどうしますか?
つまり、次のように軸を入れ替えたいわけです。
5:0軸→2軸
6:1軸→0軸
7:2軸→1軸

間違った答え

賢明なみなさんなら間違えないと思いますが、私は間違えました。
次のコードは、間違いです。

ex_mistake.py
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) になってしまいました。
入れ替えた後の軸を指定するのは間違っています。
今まで何度も間違えました。

正しい答え

次のコードが、正解です。

ex_mistake.py
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軸はここに移動) という解釈

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?