Python numpy的问题点积不工作

Python numpy的问题点积不工作,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,我目前正在学习线性代数,我正在尝试在代码中学习的东西。我正在python中使用numpy 问题是,正如你所知,任何矩阵与其逆矩阵相乘,都会得到单位矩阵 但在这里,它并没有发生 B= np.array([[3.0, 0.0, 2.0], [2.0, 0.0, -2.0], [0.0, 1.0, 1.0]]) Binv = np.linalg.inv(B) Bbits= np.dot(B,Binv) 我已经手动尝试过了。它正确地得到了倒数,但点积不是。 参见Bbits的输出 [[ 1.000000

我目前正在学习线性代数,我正在尝试在代码中学习的东西。我正在python中使用numpy

问题是,正如你所知,任何矩阵与其逆矩阵相乘,都会得到单位矩阵

但在这里,它并没有发生

B= np.array([[3.0, 0.0, 2.0], [2.0, 0.0, -2.0], [0.0, 1.0, 1.0]])
Binv = np.linalg.inv(B)
Bbits= np.dot(B,Binv)
我已经手动尝试过了。它正确地得到了倒数,但点积不是。 参见Bbits的输出

[[ 1.00000000e+00  0.00000000e+00 -5.55111512e-17]
 [ 0.00000000e+00  1.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]

你的结果实际上是正确的

运行与您提供的完全相同的代码,但添加了
np.around()

我们得到以下输出:

array([[ 1.,  0.,  0.],
       [-0.,  1.,  0.],
       [ 0.,  0.,  1.]])

在您的结果中,-5.55111512e-17只是一个舍入误差

差异非常小(1e-17),可能是四舍五入错误绝对是四舍五入错误。您可以使用
np.allclose
np.allclose(Bbits,np.eye(3))
将使用默认公差检查
Bbits
是否匹配相同大小的标识矩阵,
np.eye(3)
,请参阅如何控制公差。感谢您的回答。这确实很有帮助,但有什么方法可以消除此舍入错误。我不知道这是否可能,我知道误差非常小。再次感谢,是的!一种方法是使用我展示的
np.around()
@chris在上面给出了一个很好的建议,即使用
np.allclose
检查公差。您还可以使用Python的
格式
:查看这篇文章
array([[ 1.,  0.,  0.],
       [-0.,  1.,  0.],
       [ 0.,  0.,  1.]])