NumPyのtransposeを用いた3次元のデータの転置

こんにちは、ばいろんです。

Pythonの数値計算用ライブラリの関数であるtransposeを使う機会があったので、この関数について少しまとめてみます。

transpose

transposeはその名前の通り、2次元以上の配列に対して使うことができる転置を行う関数です(1次元の場合は元の配列をそのまま返す)。

例えば、3次元配列array[x][y][z]を宣言したとするとそれぞれに0軸、1軸、2軸が設定されます。(次の画像はx,y,z軸に軸が設定されるイメージ)

%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%892

そしてこの配列に転置をかけます

array = array.transpose()

引数の指定がないと画像のように転置します。(軸の昇順と降順を入れ替えるようです)

%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%894

ですが、場合によっては3次元配列arrayのx,zではなくx,yを転置したい場合もあります。そのときは次のようにtranspose関数に引数を取ることで実現できます。

array = array.transpose(1,0,2)

 

イメージとしては次の画像のような感じです。yのデータを0軸、xのデータを1軸として呼び出すように指定しています。

%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%893

このように引数を指定することで自在に入れ替える軸を指定することができます。

PythonはCと違い、かなり賢いので適当にコードを書いても思い通りに動くことがあるのですが、それゆえに思い通りにいかないときはかなり悩んでしまいます。今回はtransposeの動作で迷うところがあったので忘備録も兼ねて紹介しました。

swapaxes(+α)

swapaxesは指定した軸の入れ替えを行う関数です。基本的にはtransposeと使い方は一緒ですが、引数を取らないデフォルトの動作は存在しないようです。

サンプルコードと対応するイメージです。

array = array.swapaxes(0,2)

%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%894

どちらも同じ処理ができます。私は転置という意味合いを持たせたかったので通常はtransposeの方を使っています。もし、軸をめちゃくちゃに入れ替えるような配列操作をするときは転置では意味合いに違和感があるのでswapaxesの方が可読性とかを考えるといいかもしれません。

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top