我在Python中使用逆矩阵函数inv()
。
我正在计算3x3矩阵的逆矩阵,但是当我将结果与原始矩阵相乘时,我没有得到单位矩阵,为什么?
示例:
AA = [[1,6,5],[2,3,1],[1,1,7]]
>>> inv(AA)
array([[-0.31746032, 0.58730159, 0.14285714],
[ 0.20634921, -0.03174603, -0.14285714],
[ 0.01587302, -0.07936508, 0.14285714]])
>>> inv(AA) * AA
array([[-0.31746032, 3.52380952, 0.71428571],
[ 0.41269841, -0.0952381 , -0.14285714],
[ 0.01587302, -0.07936508, 1. ]])
>>> inv(AA) * AA
array([[-0.31746032, 3.52380952, 0.71428571],
[ 0.41269841, -0.0952381 , -0.14285714],
[ 0.01587302, -0.07936508, 1. ]])
...这不是单位矩阵I。我缺少什么?
答案 0 :(得分:3)
您正在执行逐元素乘法,而不是矩阵乘法。
将您的代码更改为np.matmul(inv(AA), AA)
或np.dot(inv(AA), AA)
,您将获得正确的结果
答案 1 :(得分:0)
Python 3.5 introduced a new operator代表matrix multiplication,因此可能是:
from numpy.linalg import inv
AA = [[1,6,5],[2,3,1],[1,1,7]]
inv(AA) @ AA
这给了我
array([[ 1.00000000e+00, 2.77555756e-17, -1.11022302e-16],
[ 0.00000000e+00, 1.00000000e+00, 1.11022302e-16],
[ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00]])
与预期的接近统一。
可能相关,请参阅differences between @
and dot
以及此处链接的其他问题/答案。