在python numpy.linalg中使用逆矩阵函数“ inv”

时间:2018-11-19 09:07:46

标签: python matrix

我在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。我缺少什么?

2 个答案:

答案 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以及此处链接的其他问题/答案。