Як виправити: numpy.linalg.linalgerror: сингулярна матриця
Помилка, з якою ви можете зіткнутися в Python:
numpy.linalg.LinAlgError: Singular matrix
Ця помилка виникає, коли ви намагаєтеся інвертувати сингулярну матрицю, яка за визначенням є матрицею, детермінант якої дорівнює нулю і не може бути інвертований.
Цей посібник пояснює, як вирішити цю помилку на практиці.
Як відтворити помилку
Припустімо, ми створюємо таку матрицю за допомогою 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.]]
Тепер припустімо, що ми спробуємо використати функцію inv() NumPy для обчислення зворотної матриці:
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
Ми отримуємо помилку, оскільки створена нами матриця не має оберненої матриці.
Примітка : перегляньте цю сторінку від Wolfram MathWorld, на якій показано 10 різних прикладів матриць, які не мають оберненої матриці.
За визначенням, матриця є сингулярною і не може бути інвертована, якщо вона має нульовий визначник.
Ви можете використовувати функцію det() NumPy, щоб обчислити визначник даної матриці перед спробою інвертувати її:
from numpy import det
#calculate determinant of matrix
det(my_matrix)
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» не можна інтерпретувати як ціле число