NumPyの多次元配列ndarrayは、データ入れ替えの操作も豊富にあります。transpose
関数はそのうちの1つで、転置をするときや、軸のデータの順番を入れ替えるときに役に立ちます。
この記事では、transpose
関数に焦点を当てて使い方を解説します。
軸のデータを入れ替えるとはどういうことか
多次元配列の軸と聞いて、何のことなんだろうと思った方もいるかもしれません。NumPyの多次元配列の形状は、タプルで(2, 3, 4)
のように表記します。3行4列の行列であれば、(3, 4)
と表記して第0軸が3、第1軸が4となります。
よく使用する転置の例で説明しましょう。転置はこの軸(axis)を入れ替えることに相当します。まずは、1次元のベクトルで考えてみます。
行ベクトルを転置すると列ベクトル、列ベクトルを転置すると行ベクトルになります。転置した行列やベクトルには という添え字をつけることで元のものから転置したものであることを示します。
しかしながらNumPyでは、n次元ベクトルが行ベクトルであるか列ベクトルであるかの区別はしません。なので、ベクトルをtranspose
関数で転置しても何も変わりません。
2次元配列以降からtranspose
関数を使うことで中身が変わります。このとき、次のように行と列が反転します。
元の配列の行と列を入れ替えることは、0軸と1軸を入れ替えることと同義です。その場合、次のような変換がなされます。
3次元にした場合も同様に、0軸と1軸を入れ替えた場合、次のような変換になります。
transpose
このような転置を行う関数は3通りあり、np.transpose
、np.ndarray.transpose
とnp.ndarray.T
とがあります。
np.ndarray.transpose
np.ndarray.transpose
のAPIドキュメントは以下の通りです。
np.ndarray.transpose(axes)
params:
パラメータ名 |
型 |
概要 |
axes |
intのタプルまたはn個並んだint |
(省略可能) 転置を行なった後の軸(axis)の入れ替え方を指定します。何も指定しなければ軸の順番が逆になった配列を返します。 |
returns:
指定された軸の入れ替え(転置)を行なった配列(ndarray)が返されます。
先程見たように1次元配列に対しては何も変化を及ぼしません。これは他の2つの関数についても同じことが言えます。
引数のaxes
には、軸をどのように入れ替えるかを指定します。3次元配列の1軸と2軸を入れ替えたい場合は、(0, 2, 1)
とします。0軸と2軸を入れ替えたい場合は、(2, 1, 0)
と指定してください。
まずは2次元配列からtranspose
の使用例を確認します。
1次元配列について見てみます。見た目がほとんど同じでもreshape
で形状変換することで転置を行うことは可能です。
次は3次元配列について見ていきます。
np.transpose
次はnp.transpose
の方を見ていきましょう。基本的な使い方はnp.ndarray.transpose
とほぼ同じです。第一引数に転置したい配列(ndarray)を指定すること以外は何も変更はありません。
APIドキュメントは以下の通りです。
np.transpose(a, axes = None)
params:
パラメータ名 |
型 |
概要 |
a |
array_like (配列に相当するもの) |
転置したい配列をここで指定します。 |
axes |
intのタプル |
(省略可能)初期値None 転置する際の軸の順番を指定します。 |
returns:
転置されたあとの配列(ndarray)が返されます。
ほとんど同じですが、こちらも使用方法を確認してみます。
1次元配列でも確認しておきます。
np.ndarray.T
最後にnp.ndarray.T
について扱っていきます。これは引数を指定しないnp.ndarray.transpose
です。プロパティのように使用することができます。