Python numpy的问题点积不工作
我目前正在学习线性代数,我正在尝试在代码中学习的东西。我正在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
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.]])