【NumPy入門 np.transpose】配列の軸を取り替える/行列の転置の方法

こんにちは、インストラクターのフクロウです。

行列の転置や、これを多次元配列に拡張して配列の座標軸の順番を取り替えるnp.transposeという関数があります。

この記事では、np.transpose関数の使い方の解説を行いますよ!

これがわかれば高校の数学の授業でやったような行列計算(今は習わないんでしたっけ?)をPython上で再現できますよ〜!

目次

np.transposeの基本的な使い方

二次元配列の転置

二次元配列(行列)の転置を試してみましょう。

まずは配列の情報を表示する関数とサンプル配列を用意しておきます。

import numpy as np

def array_info(x): 
    print("配列のshape", x.shape) 
    print("配列の要素のデータ型", x.dtype) 
    print("配列の中身n",x)

A = np.arange(-5, 5).reshape((2,5))

array_info(A)

[出力結果]

配列のshape (2, 5)
配列の要素のデータ型 int64
配列の中身
 [[-5 -4 -3 -2 -1]
 [ 0  1  2  3  4]]

さて、transposeはnp.transposeとしてもnp.ndarray.trasnposeとしても実装されています。

どちらを使っても同じ結果になります。

まずは配列のメソッドとして使います。

引数を指定しない状態だと、転置行列を作ってくれます。

A_ = A.transpose()
array_info(A_)

[出力結果]

配列のshape (5, 2)
配列の要素のデータ型 int64
配列の中身
 [[-5  0]
 [-4  1]
 [-3  2]
 [-2  3]
 [-1  4]]

多次元配列の軸を取り替える方法

多次元配列の軸を任意の順番に組み替えるには、axesパラメータを使います。

axesパラメータにインデックスを任意の順番に並び替えたリストを渡すことで可能になります。

試してみましょう。

二次元配列の軸を取り替える方法

オリジナルの配列のaxesは[0,1]ですね。

これを逆の[1,0]にして転置してみましょう。

np.transpose(A, axes=[1,0])

[出力結果]

array([[-5,  0],
       [-4,  1],
       [-3,  2],
       [-2,  3],
       [-1,  4]])

三次元配列の軸を取り替える方法

使い方は二次元配列の場合と同じです。

ここでは三次元配列を試していますが、それ以上の多次元配列でも同様です。

B = np.arange(-10,20).reshape((2,3,5))
array_info(B)

[出力結果]

配列のshape (2, 3, 5)
配列の要素のデータ型 int64
配列の中身
 [[[-10  -9  -8  -7  -6]
  [ -5  -4  -3  -2  -1]
  [  0   1   2   3   4]]

 [[  5   6   7   8   9]
  [ 10  11  12  13  14]
  [ 15  16  17  18  19]]]

axesパラメータの指定方法は二次元配列と同様です。

np.transpose(B, axes=[1,2,0])

[出力結果]

array([[[-10,   5],
        [ -9,   6],
        [ -8,   7],
        [ -7,   8],
        [ -6,   9]],

       [[ -5,  10],
        [ -4,  11],
        [ -3,  12],
        [ -2,  13],
        [ -1,  14]],

       [[  0,  15],
        [  1,  16],
        [  2,  17],
        [  3,  18],
        [  4,  19]]])

一次元配列の軸を取り替える方法

一次元配列のtrasnposeは、元と同じ配列が返ってきます。

np.transpose(np.arange(-5,5))

[出力結果]

array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])

まとめ

この記事では、多次元配列の座標軸の順番を並び替えるnp.transposeを紹介しました。

行列の転置、データ解析の前処理でお世話になりそうな処理ですね。

是非覚えて使いこなしてくださいね!

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次