Como corrigir: numpy.linalg.linalgerror: matriz singular
Um erro que você pode encontrar em Python é:
numpy.linalg.LinAlgError: Singular matrix
Este erro ocorre quando você tenta inverter uma matriz singular, que por definição é uma matriz cujo determinante é zero e não pode ser invertida.
Este tutorial explica como resolver esse erro na prática.
Como reproduzir o erro
Suponha que criemos a seguinte matriz usando 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.]]
Agora suponha que tentemos usar a função inv() do NumPy para calcular o inverso da matriz:
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
Recebemos um erro porque a matriz que criamos não possui uma matriz inversa.
Nota : Confira esta página do Wolfram MathWorld que mostra 10 exemplos diferentes de matrizes que não possuem uma matriz inversa.
Por definição, uma matriz é singular e não pode ser invertida se tiver determinante zero.
Você pode usar a função det() do NumPy para calcular o determinante de uma determinada matriz antes de tentar invertê-la:
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.0
O determinante da nossa matriz é zero, o que explica porque encontramos um erro.
Como corrigir o erro
A única maneira de contornar esse erro é simplesmente criar uma matriz que não seja singular.
Por exemplo, suponha que usemos a função inv() para inverter a seguinte matriz:
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]]
Não recebemos erros ao inverter a matriz porque a matriz não é singular.
Recursos adicionais
Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:
Como corrigir: o objeto ‘numpy.float64’ não pode ser chamado
Como corrigir: o objeto ‘numpy.ndarray’ não pode ser chamado
Como corrigir: o objeto ‘numpy.float64’ não pode ser interpretado como um número inteiro