NumPyのeyeは、単位行列を生成するための関数です。単位行列は、対角成分が1で、それ以外の成分が0の正方行列です。機械学習や線形代数の計算でよく利用されます。この記事では、eye関数の基本的な使い方から、identity関数やdiag関数との比較までを解説します。
eyeの基本的な使い方
eye関数は、指定したサイズの単位行列を生成します。
最もシンプルな例
import numpy as np # 3x3の単位行列を生成 arr = np.eye(3) print(arr)
このコードでは、np.eye(3)によって、3x3の単位行列が生成され、arr変数に格納されます。eye関数はデフォルトでfloat64型の1と0で要素を生成します。
出力
[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
行数と列数の指定
eye関数の最初の引数には、生成したい単位行列の行数を指定します。列数を指定することもでき、その場合は第2引数Nに列数を指定します。
# 4x4の単位行列 arr1 = np.eye(4) print(arr1) # 2x5の行列(対角成分のみ1) arr2 = np.eye(2, 5) print(arr2)
出力
[[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.]]
対角成分の位置の指定
k引数を使うと、1を配置する対角線の位置を指定できます。デフォルトは0で、これは主対角線(左上から右下への対角線)を意味します。kを正の数にすると対角線が上に、負の数にすると下にずれます。
# 主対角線から1つ上にずらす arr1 = np.eye(3, k=1) print(arr1) # 主対角線から2つ下にずらす arr2 = np.eye(4, k=-2) print(arr2)
出力
[[0. 1. 0.] [0. 0. 1.] [0. 0. 0.]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [1. 0. 0. 0.] [0. 1. 0. 0.]]
データ型の指定
dtype引数で、配列のデータ型を指定できます。デフォルトはfloat64です。
# int型の単位行列 arr_int = np.eye(2, dtype=int) print(arr_int) # complex型の単位行列 arr_complex = np.eye(2, dtype=complex) print(arr_complex)
出力
[[1 0] [0 1]] [[1.+0.j 0.+0.j] [0.+0.j 1.+0.j]]
メモリレイアウトの指定(order)
order引数を使うと、多次元配列のメモリ上での配置順序を指定できます。
'C'(C言語スタイル)を選ぶと行優先、'F'(Fortranスタイル)を選ぶと列優先になります。デフォルトは'C'です。
通常意識する必要はありませんが、特定の計算ライブラリと連携する際に、パフォーマンスに影響することがあります。
# Fortranスタイルの配列 arr_f = np.eye(3, order='F')
identity関数との比較
identity関数も単位行列を生成しますが、eye関数とは異なり、正方行列しか生成できません。また、identity関数はk引数を持たないため、対角線の位置を調整できません。
# 3x3の単位行列を生成 arr = np.identity(3) print(arr)
出力
[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
diag関数との比較
diag関数は、対角成分を指定して配列を生成したり、既存の配列から対角成分を取り出すことができます。eye関数とは異なり、非正方行列を生成したり、対角成分の値を自由に設定できます。
# 対角成分が[1, 2, 3]の配列を生成 arr = np.diag([1, 2, 3]) print(arr) # 既存の配列の対角成分を取得 arr_diag = np.diag(arr) print(arr_diag)
出力
[[1 0 0] [0 2 0] [0 0 3]] [1 2 3]
eye, identity, diag の使い分け
| 機能 | eye |
identity |
diag |
|---|---|---|---|
| 正方行列の生成 | ○ | ○ | ○ |
| 非正方行列の生成 | ○ | × | ○ |
| 対角線の位置指定 | ○ | × | ○ |
| 対角成分の値の指定 | × | × | ○ |
eye: 単位行列や、対角線の位置をずらした行列を生成する場合。identity: シンプルな単位行列を生成する場合。diag: 対角成分を自由に設定したり、既存の配列から対角成分を取得する場合。
まとめ
NumPyのeye関数は、単位行列やそれに類似した行列を効率的に生成する関数です。identity関数やdiag関数と使い分けることで、さまざまな行列を柔軟に扱えます。