Одна ошибка, с которой вы можете столкнуться в 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 не может быть интерпретирован как целое число