如何修复: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.]]

现在假设我们尝试使用 NumPy 的inv()函数来计算矩阵的逆:

 from numpy import inv

#attempt to invert matrix
inv(my_matrix)

numpy.linalg.LinAlgError: Singular matrix

我们收到错误,因为我们创建的矩阵没有逆矩阵。

注意:查看 Wolfram MathWorld 的此页面,其中显示了 10 个没有逆矩阵的不同矩阵示例。

根据定义,矩阵是奇异的,如果行列式为零则不能逆。

您可以使用 NumPy 的det()函数在尝试反转给定矩阵之前计算其行列式:

 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”无法解释为整数

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注