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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.