如果这是一个愚蠢的问题,请原谅我。 我只是在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)位置得到了一些非零值。
答案 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
个对象的点积。)