해결 방법: 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’ 개체를 정수로 해석할 수 없습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다