你在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'对象不能被解释成整数