해결 방법: 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
우리가 만든 행렬에 역행렬이 없기 때문에 오류가 발생합니다.
참고 : 역행렬이 없는 행렬의 10가지 예를 보여주는 Wolfram MathWorld의 이 페이지를 확인하세요.
정의에 따르면 행렬은 특이 행렬이며 행렬식이 0이면 역전될 수 없습니다.
NumPy의 det() 함수를 사용하여 주어진 행렬을 반전시키기 전에 행렬식을 계산할 수 있습니다.
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.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’ 개체를 정수로 해석할 수 없습니다.