Come risolvere: numpy.linalg.linalgerror: matrice singolare
Un errore che potresti riscontrare in Python è:
numpy.linalg.LinAlgError: Singular matrix
Questo errore si verifica quando si tenta di invertire una matrice singolare, che per definizione è una matrice il cui determinante è zero e non può essere invertita.
Questo tutorial spiega come risolvere questo errore nella pratica.
Come riprodurre l’errore
Supponiamo di creare la seguente matrice utilizzando 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.]]
Supponiamo ora di provare a utilizzare la funzione inv() di NumPy per calcolare l’inverso della matrice:
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
Riceviamo un errore perché la matrice che abbiamo creato non ha una matrice inversa.
Nota : dai un’occhiata a questa pagina di Wolfram MathWorld che mostra 10 diversi esempi di matrici che non hanno una matrice inversa.
Per definizione una matrice è singolare e non può essere invertita se ha determinante zero.
Puoi utilizzare la funzione det() di NumPy per calcolare il determinante di una determinata matrice prima di tentare di invertirla:
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.0
Il determinante della nostra matrice è zero, il che spiega perché riscontriamo un errore.
Come correggere l’errore
L’unico modo per aggirare questo errore è semplicemente creare una matrice che non sia singolare.
Ad esempio, supponiamo di utilizzare la funzione inv() per invertire la seguente matrice:
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]]
Non riceviamo alcun errore quando invertiamo la matrice perché la matrice non è singolare.
Risorse addizionali
I seguenti tutorial spiegano come correggere altri errori comuni in Python:
Come risolvere il problema: l’oggetto “numpy.float64” non è richiamabile
Come risolvere il problema: l’oggetto “numpy.ndarray” non è richiamabile
Come risolvere il problema: l’oggetto “numpy.float64” non può essere interpretato come un numero intero