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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *