Як виправити: 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» не можна інтерпретувати як ціле число

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *