Как исправить: 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» не может быть интерпретирован как целое число.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *