Numpy矩阵乘法与它的inv

时间:2018-01-26 09:05:03

标签: python numpy matrix floating-point

如果这是一个愚蠢的问题,请原谅我。 我只是在python shell中探索numpy而且我运行了这些行

>>> from numpy.linalg import inv
>>> from numpy import dot, transpose
>>> a = np.matrix('1,2;3,4')
>>> print a
[[1 2]
 [3 4]]
>>> print inv(a)
[[-2.   1. ]
 [ 1.5 -0.5]]
>>> print a.dot(inv(a))
[[1.0000000e+00 0.0000000e+00]
 [8.8817842e-16 1.0000000e+00]]

在最后一行我期待值

[[1,0]
 [0,1]] 

(单位矩阵),但我在(1,0)位置得到了一些非零值。

1 个答案:

答案 0 :(得分:2)

这是浮点运算的结果,以及与之相关的所有缺点。有关发生这种情况的详细信息,请参阅Is floating point math broken?

你的结果并不完美,但足够接近,这就是关键。 inv当然不会计算完全结果(毕竟它使用数值方法)。相应地,A * A_inv不会完全是单位矩阵,但它足够接近。您可以使用np.allclose测试亲密度

np.allclose(a * inv(a), np.eye(2))
True

(请注意a * b计算matrix个对象的点积。)