Jak naprawić: numpy.linalg.linalgerror: macierz pojedyncza
Błąd, który możesz napotkać w Pythonie to:
numpy.linalg.LinAlgError: Singular matrix
Ten błąd występuje, gdy próbujesz odwrócić macierz pojedynczą, która z definicji jest macierzą, której wyznacznik wynosi zero i której nie można odwrócić.
W tym samouczku wyjaśniono, jak w praktyce rozwiązać ten błąd.
Jak odtworzyć błąd
Załóżmy, że tworzymy następującą macierz za pomocą 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.]]
Załóżmy teraz, że spróbujemy użyć funkcji inv() NumPy do obliczenia odwrotności macierzy:
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
Otrzymujemy błąd, ponieważ utworzona przez nas macierz nie ma macierzy odwrotnej.
Uwaga : sprawdź tę stronę z Wolfram MathWorld, która pokazuje 10 różnych przykładów macierzy, które nie mają macierzy odwrotnej.
Z definicji macierz jest liczbą pojedynczą i nie można jej odwrócić, jeśli ma wyznacznik zerowy.
Możesz użyć funkcji det() NumPy, aby obliczyć wyznacznik danej macierzy przed próbą jej odwrócenia:
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.0
Wyznacznikiem naszej macierzy jest zero, co wyjaśnia dlaczego napotykamy błąd.
Jak naprawić błąd
Jedynym sposobem na obejście tego błędu jest po prostu utworzenie macierzy, która nie jest pojedyncza.
Załóżmy na przykład, że używamy funkcji inv() do odwracania następującej macierzy:
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]]
Przy odwracaniu macierzy nie otrzymujemy żadnych błędów, ponieważ macierz nie jest osobliwa.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:
Jak naprawić: Nie można wywołać obiektu „numpy.float64”.
Jak naprawić: Nie można wywołać obiektu „numpy.ndarray”.
Jak naprawić: Obiektu „numpy.float64” nie można interpretować jako liczby całkowitej