Pythonの数値計算ライブラリNumPyを使って行列計算を行う際、最初からデータが入っているわけではなく、「すべての要素が0」や「対角線だけが1」といった特定のパターンの行列を作成してから処理を始めることがよくあります。
今回は、データ分析や機械学習のアルゴリズム実装において、変数の初期化などで頻繁に使用する4つの代表的な行列生成関数について解説します。
今回紹介する関数一覧
NumPyには、特定の形状や値を持つ行列を簡単に作るための関数が用意されています。
| 関数名 | 役割 | 生成される行列の特徴 |
np.eye(N) | 単位行列 | 対角成分が1、それ以外が0の正方行列 |
np.zeros((N, M)) | ゼロ行列 | 全ての要素が0の行列 |
np.tri(N) | 三角行列 | 対角線より下側が1、上側が0の行列 |
np.ones((N, M)) | 全要素が1の行列 | 全ての要素が1の行列 |
それぞれの使い方と実行結果を見ていきましょう。
1. 単位行列の生成 (np.eye)
単位行列(Identity matrix)とは、対角成分(左上から右下への線)がすべて 1 で、それ以外の成分がすべて 0 である正方行列のことです。行列の掛け算において、数字の「1」と同じような役割(掛けても値が変わらない)を果たします。
引数 N には行列のサイズ(行数兼列数)を指定します。
import numpy as np
# 4x4 の単位行列を生成
e = np.eye(4)
print(e)
実行結果
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
2. ゼロ行列の生成 (np.zeros)
ゼロ行列とは、すべての要素が 0 である行列です。
例えば、計算結果を格納するための「空の箱」を用意しておきたい場合などに、初期化処理として最もよく使われます。
引数は (行数, 列数) のタプル形式で指定します。
import numpy as np
# 2行3列 のゼロ行列を生成
zero = np.zeros((2, 3))
print(zero)
実行結果
[[0. 0. 0.]
[0. 0. 0.]]
3. 三角行列の生成 (np.tri)
np.tri は、対角線およびそれより下側の要素が 1、上側が 0 となる「下三角行列」を生成します。特定のフィルタリング処理などで使用されることがあります。
引数 N にサイズを指定します。
import numpy as np
# 4x4 の下三角行列を生成
tr = np.tri(4)
print(tr)
実行結果
[[1. 0. 0. 0.]
[1. 1. 0. 0.]
[1. 1. 1. 0.]
[1. 1. 1. 1.]]
4. 全要素が1の行列の生成 (np.ones)
全ての要素が 1 である行列です。
ゼロ行列と同様に初期化に使われたり、あるいは「すべての要素に同じ値を足したい」といったブロードキャスト演算のベースとして使われたりします。
こちらも引数は (行数, 列数) のタプルで指定します。
import numpy as np
# 3行2列 の全要素が1の行列を生成
ones = np.ones((3, 2))
print(ones)
実行結果
[[1. 1.]
[1. 1.]
[1. 1.]]
まとめ
NumPyでの行列計算において、手動でリストを書いて行列を定義することは稀です。基本的には今回紹介した np.zeros や np.ones などを使って「枠」を作り、そこに計算結果を代入していく流れが一般的です。
これらの関数は、デフォルトでは float64(浮動小数点数)型の行列を生成します。もし整数型の行列が必要な場合は、引数に dtype=int を追加することでデータ型を変更できる点も覚えておくと便利です。
