以下の内容はhttps://pydocument.hatenablog.com/entry/2025/02/17/004457より取得しました。


NumPyの「eye」の使い方 – 単位行列を生成する

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関数と使い分けることで、さまざまな行列を柔軟に扱えます。




以上の内容はhttps://pydocument.hatenablog.com/entry/2025/02/17/004457より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14