NumPy は、Python を高速化してくれるモジュールの1つです。
線形代数演算が必要な統計解析や人工知能などで頻繁に用いられています。
NumPyには独特の文法・記法があるため、
- サクッとコードを書けてラク
という反面、
- (特殊)文法を理解していないと、コードが理解できない
といった面があります。
NumPyを身につけるために、様々なサンプルコードを動かすのがおすすめです。
サンプルに入力する初期値をについて、
様々なものに変えて動作確認することで、
学びたいアルゴリズムを理解することができます。
NumPyの配列の初期化の方法には、よく使われるものには、以下のものがあります。
- 要素がすべてゼロの行列
- 要素がすべてイチの行列
- 単位行列(対角要素だけ1で他が0の行列)
これらの行列をサクッと生成できると、NumPyの勉強がはかどるわけです。
また、
- 行列をより高速に生成する方法
があると、本番の高速計算に役立ちます。
そこで本シリーズでは、NumPyの配列生成や初期化について、まとめています。
第1弾の記事でゼロ行列の生成方法について、サクッとわかりやすくまとめました↓
続く第2弾では、イチ行列の生成方法について解説しています↓
本記事は、シリーズの第3弾として、
ベクトルや行列の生成・初期化のやり方の1つ、
- 単位行列を作る方法
について、わかりやすく、サクッとまとめたいと思います。
【Python NumPy 独学】ベクトル・行列の生成・初期化方法(3):単位行列の生成( identity、eye)について、サンプルコードとともに、サクッとわかりやすくまとめました【Python 入門】
(1), 「単位行列」とは?
「単位行列」とは、
- 行列の対角成分(要素)が1
- その他の成分(要素)が0
である行列のことを言います。
対角成分、非対角成分とは?
上の左は普通の行列です。
- 斜めの成分(要素)(1、5、9)を「対角成分(対角要素)」
- それ以外の成分(要素)(2、3、6、4、7、8)を「非対角成分(要素)」
と言います。
対角成分が1で非対角成分が0の行列は、3行3列の場合、上の右のような行列になります。
単位行列ってどんな意味があるの?
数字の1になにかをかけ算してもその数字は変わりませんが、
行列に単位行列をかけても、元の行列は変わりません。
単位行列は、数字の1のようなものに対応する行列と言えます。
(2), 単位行列の生成方法:eye
単位行列は、2つの方法で生成できます。
- eye( ) メソッド
- identity( ) メソッド
まずは eye ( ) メソッドを解説して、
次にidentity ( )メソッドを説明します。
最後にこれら2つのメソッドの違いについてまとめます。
単位行列は、行と列の数が等しいので、
かっこの中に、1つ数を入れて実行します。
例えば3を入れたら、以下のように、3行3列の単位行列を生成できます。
単位行列の生成(3×3)
デフォルトでは、各要素は浮動小数点数型で出力されています。
もし、整数型を使いたければ、以下のように「dtype」 を使います。
「dtype = int」とすることで、整数型を出力させることができます。
(ちなみに dtype は、data type データ型 の意味になります)
より大きな単位行列の生成
4×4や5×5の単位行列も上のようにサクッと生成することができます。
もちろん、2×2の単位行列は、
np.eye(2)
で生成することができます。
(3), 単位行列の生成方法: identity
identity( )メソッドは、eye( )メソッドと基本的な使い方は同じです。
3行3列の単位行列を生成してみます。
単位行列の生成(3×3)
デフォルトでは、各要素は浮動小数点数型で出力されています。
もし、整数型を使いたければ、以下のように「dtype」 を使います。
「dtype = int」とすることで、整数型を出力させることができます。
(ちなみに dtype は、data type データ型 の意味になります)
より大きな単位行列の生成
4×4や5×5の単位行列も上のようにサクッと生成することができます。
もちろん、2×2の単位行列は、
np.identity(2)
で生成することができます。
このように identity ( ) や eye( ) で単位行列が作成できます。
(4), eye ( ) と identity ( ) の違いは?
eye( ) メソッドと、identity ( ) メソッドには違いがあります。
eye( )メソッドには、特殊な単位行列(?)を生成する機能があります。
eye( )メソッドは、数字を2個与えることができます。
np.eye(3, 3)とすると、3行3列の単位行列ができます。np.eye(3)と同じです。
他にも、3行1列の行列、3行2列の行列も作成できます。
さらに、3行4列、3行5列などの行列も作成できます。
他にも、1の位置を変えることができます。
eyeメソッドでは、 k を設定すると、
1の位置をずらすことができます。
k=0はデフォルトで普通の単位行列になります。
k=1とすると、1のスタートが1列、右にずれます。
k=2とすると、1のスタートが2列、右にずれます。
K=3とすると、1のスタートが3列、右にずれます。
k=0はデフォルトで普通の単位行列になります。
k=−1とすると、1のスタートが1列、左にずれます。
k=−2とすると、1のスタートが2列、左にずれます。
K=−3とすると、1のスタートが3列、左にずれます。
k=−4とすると、1のスタートが4列、左にずれます。もはや1がないゼロ行列になります。
k=−5とすると、1のスタートが5列、左にずれます。もはや1がないゼロ行列になります。
このように、eye( )メソッドは、擬似単位行列を作ることができます。
ちなみに、eye( )メソッドとidentity( )メソッドは、処理速度はほとんど変わりません
np.eye( ), np.identity( ) の活用事例とは?
随時追加していきます。よかったらフォローなどしておくと見逃さないかと思います。
というわけで、本記事では、
ベクトルや行列の生成・初期化のやり方の1つ、
単位行列を作る方法に対して、
- eyeメソッド
- identityメソッド
- eyeメソッドとidentityメソッドの違い
について、わかりやすく、サクッとまとめました。
こちらの記事もございます↓
第4弾では、より高速に行列を生成する方法を解説しています↓
『【Python NumPy】ベクトル・行列の生成・初期化方法(4):高速な配列の生成方法(empty)について、サンプルコードとともに、サクッとわかりやすくまとめました【Python 入門】』
こちらもございます↓
「Numpy」については、こちらの書籍でも解説しています(無料)↓