【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を紹介しました。

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

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

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

フクロウ

フクロウ

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説