PythonとSciPyで逆行列を計算する方法をわかりやすく解説
行列の逆行列を数学的に計算し、その結果を別の処理に活用したい場面は少なくありません。まずは、手動で逆行列を求める際の手順を見ていきましょう。
手動で逆行列を求める手順
1. 小行列式(マイナー)の値を計算する
この計算では、着目している現在の行と列の値を無視し、残りの値から行列式を求めます。こうして計算された小行列式(マイナー)は、ひとつの行列としてまとめて保存します。
2. 余因子(コファクター)を求める
次のステップは余因子の計算です。小行列式の行列に含まれる各値の符号を、交互に「+」から「−」へ、「−」から「+」へと入れ替えていきます。
3. 行列を転置する
続いて行列を転置します。転置とは、行を列に、列を行に入れ替える操作のことです。
4. 行列式で各要素を割る
最後に、元の行列の行列式を求め、これまでに計算した行列のすべての要素をその行列式で割ります。こうして得られる行列が、元の行列の逆行列となります。
このように、手作業で逆行列を求めるのは非常に手間のかかる長いプロセスです。そこで役立つのが、SciPyライブラリに用意されている「inv」関数です。
SciPyの「inv」関数とは
「inv」関数を使えば、複雑な計算を一瞬で実行でき、逆行列を簡単に取得できます。
構文
scipy.linalg.inv(matrix)
引数「matrix」には、逆行列を求めたい対象の行列を渡します。
コード例
from scipy import linalg
import numpy as np
two_d_matrix = np.array([[7, 9], [33, 8]])
print("行列の逆行列は:")
print(linalg.inv(two_d_matrix))
実行結果
行列の逆行列は: [[-0.03319502 0.0373444 ] [ 0.13692946 -0.02904564]]
コードの解説
- 必要なライブラリ(SciPyのlinalgモジュールとNumPy)をインポートします。
- 具体的な値を持つ2次元の行列を定義します。
- 行列の逆行列を計算する「inv」関数に対象の行列を引数として渡します。
- 関数を呼び出して計算を実行します。
- 計算結果がコンソールに出力されます。
補足:inv関数を使う際の注意点
「inv」関数の戻り値はNumPy配列として返されます。また、対象が正方行列でない場合や、行列式が0となる特異行列の場合には「LinAlgError」が発生するため注意が必要です。計算結果を検証したい場合は、元の行列と逆行列の内積(ドット積)を計算すると、単位行列になることを確認できます。
-
SciPyを使ってPythonで行列の行列式を計算する方法
行列式(determinant)は、行列や多次元配列に対して計算できる重要なスカラー値です。行列や配列の性質をより深く理解したい場合、この行列式の計算が必要になることがあります。 SciPyの「det」関数について SciPyには、「linalg」モジュール(線形代数:Linear Algebraの略称)の中に「det」という関数が用意されており、これを使うことで行列式を簡単に求めることができます。 det関数の構文 scipy.linalg.det(matrix) 引数「matrix」には、行列式を求めたい行列または配列を渡します。この関数は、行列や配列を引数として渡すだけで呼び出すことがで
-
SciPyを使ってPythonで行列の固有値・固有ベクトルを計算する方法
固有ベクトルと固有値は、さまざまな場面で活用されている重要な概念です。「Eigen(アイゲン)」という言葉はドイツ語で「固有の」「典型的な」を意味し、固有ベクトルは「特性ベクトル」と呼ばれることもあります。たとえば、データセットに何らかの変換を加えたいものの、「データの方向は変えたくない」という条件がある場合、固有ベクトルと固有値が役立ちます。 正方行列(行数と列数が等しい行列)に対して、固有値と固有ベクトルは次の式を満たします。 固有ベクトルは、まず固有値を求めた後に計算されるのが一般的です。 注意 − 固有値は、3次元以上の高次元でも問題なく機能します。 こうした数学的計算を手作業で行