Pythonで数値計算を行う際に欠かせないライブラリ「NumPy」には、行列やベクトルを簡単に扱う機能がたくさん用意されています。
この記事では、NumPyで単位行列(対角成分が1、それ以外が0の行列)を作成する方法について、代表的な3つの関数 eye()
、identity()
、diag()
を使って紹介します。
この記事の対象
単位行列とは?
数学や線形代数で登場する「単位行列(Identity Matrix)」は、対角成分がすべて1、その他がすべて0の正方行列です。
例えば、3×3の単位行列は以下のような形です。
[[1 0 0]
[0 1 0]
[0 0 1]]
この行列は、行列の掛け算で元の行列の値を変えない(単位元)という重要な性質を持ちます。
NumPyの eye() 関数で単位行列を作る
NumPyの eye()
関数は、任意のサイズの単位行列を作成できます。
基本構文
numpy.eye(N, M=None, k=0, dtype=float)
引数 | 説明 |
---|---|
N | 行数 |
M | 列数(省略時はNと同じ=正方行列) |
k | 対角成分のオフセット(0で主対角、+1で上、-1で下) |
dtype | データ型(int, floatなど) |
使用例
import numpy as np
matrix = np.eye(5, dtype=int)
print(matrix)
出力結果
[[1 0 0 0 0]
[0 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]]
これは5×5の整数型の単位行列です。
eye() の応用:対角の位置を変えてみよう
k
引数を使うと、対角の位置をずらすことができます。
np.eye(4, k=1)
出力例(上側の対角)
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
np.eye(4, k=-1)
出力例(下側の対角)
[[0. 0. 0. 0.]
[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]]
identity() 関数との違いと使い分け
identity()
関数も単位行列を作るための関数ですが、正方行列専用です。
使用例
import numpy as np
matrix = np.identity(4)
print(matrix)
出力
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
eye() と identity() の違い
関数名 | 列数Mの指定 | 対角の位置変更 | 用途例 |
---|---|---|---|
eye | 可(長方形OK) | 可(k引数) | 特定の位置に1を配置したい場合 |
identity | 不可(正方のみ) | 不可 | シンプルな単位行列がほしいとき |
diag() 関数:任意の対角成分を持つ行列
diag()
関数は、任意の対角成分を持つ対角行列を作成できます。
使用例
import numpy as np
d_matrix = np.diag([10, 20, 30])
print(d_matrix)
出力
[[10 0 0]
[ 0 20 0]
[ 0 0 30]]
用途例:
- エラーの分散を表す共分散行列
- 対角成分に特定のスカラー値を並べたいとき
単位行列を使う場面は?
活用シーン | 説明 |
---|---|
線形代数 | 行列の逆行列・固有値分解の基礎 |
機械学習 | 行列演算や初期化に使用される |
数値計算 | 正規方程式(Ax = b)の解法 |
プログラムの検証 | 出力の正しさを確認するための基準として |
よくあるエラーと対処法
エラー内容 | 原因 | 対策 |
---|---|---|
TypeError: 'float' object cannot be interpreted as an integer | eye() の引数に小数を指定している | 引数を整数にする |
ValueError: negative dimensions are not allowed | 負の値をNやMに指定 | 正の整数に修正する |
UnicodeDecodeErrorなど | 関係なし(dtype 指定ミスなど) | dtype=int or dtype=float を明示的に指定 |
まとめ:eye, identity, diagの使い分け
機能 | 関数 | 特徴 |
---|---|---|
単位行列 | eye() | 正方行列・長方行列の両方対応、対角位置も調整可能 |
単位行列(簡易) | identity() | シンプルで正方形のみ |
対角行列 | diag() | 任意の値を対角に設定できる |
NumPyを使えば、これらの行列を1行のコードで簡単に生成できます。数学的な処理やデータ分析で頻繁に使われるので、ぜひ覚えておきましょう!