修正方法: numpy.linalg.linalgerror: 特異行列
Python で発生する可能性のあるエラーは次のとおりです。
numpy.linalg.LinAlgError: Singular matrix
このエラーは、定義上、行列式が 0 で反転できない行列である特異行列を反転しようとすると発生します。
このチュートリアルでは、このエラーを実際に解決する方法を説明します。
エラーを再現する方法
NumPy を使用して次の行列を作成するとします。
import numpy as np
#create 2x2 matrix
my_matrix = np. array ([[1., 1.], [1., 1.]])
#display matrix
print (my_matrix)
[[1. 1.]
[1. 1.]]
ここで、NumPy のinv()関数を使用して逆行列を計算しようとするとします。
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
作成した行列には逆行列がないため、エラーが発生します。
注: Wolfram MathWorld のこのページには、逆行列を持たない行列の 10 個の異なる例が示されています。
定義上、行列は特異であり、行列式がゼロの場合は反転できません。
NumPy のdet()関数を使用すると、特定の行列を反転する前にその行列式を計算できます。
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.0
行列の行列式はゼロであり、これがエラーが発生する理由を説明しています。
エラーを修正する方法
このエラーを回避する唯一の方法は、単純に特異でない行列を作成することです。
たとえば、 inv()関数を使用して次の行列を反転するとします。
import numpy as np
from numpy. linalg import inv, det
#create 2x2 matrix that is not singular
my_matrix = np. array ([[1., 7.], [4., 2.]])
#display matrix
print (my_matrix)
[[1. 7.]
[4. 2.]]
#calculate determinant of matrix
print (det(my_matrix))
-25.9999999993
#calculate inverse of matrix
print (inv(my_matrix))
[[-0.07692308 0.26923077]
[0.15384615 -0.03846154]]
行列は特異ではないため、行列を反転してもエラーは発生しません。
追加リソース
次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。
修正方法: オブジェクト「numpy.float64」は呼び出し可能ではありません
修正方法: オブジェクト「numpy.ndarray」は呼び出し可能ではありません
修正方法: オブジェクト「numpy.float64」は整数として解釈できません