【问题标题】:Problem with numpy the dot product does not worknumpy的问题点积不起作用
【发布时间】:2020-06-22 12:04:54
【问题描述】:

我目前正在学习线性代数,我正在尝试尝试我在代码中学到的东西。我在 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]]

【问题讨论】:

标签: python numpy linear-algebra


【解决方案1】:

你的结果实际上是正确的!

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

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.around(np.dot(B,Binv),2)

我们得到以下输出:

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

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

【讨论】:

  • 感谢您的回答,这真的很有帮助,但有什么办法可以摆脱这个舍入错误。我什至不知道这是否可能,而且我知道错误非常小。再次感谢。
  • 是的!一种方法是使用我展示的np.around()。 @chris 上面给出了一个很好的建议,即使用np.allclose 来检查容差。你也可以使用 Python 的format:查看这篇文章stackoverflow.com/questions/25497889/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 2021-11-29
  • 2015-03-31
相关资源
最近更新 更多