0

我使用 NumPy 数组制作了一个简单的线性方程组求解器。我手头有两个阵列:一个 2x2 (A) 一个和一个 2x1 一个 (B)。

通过使用 反转第一个数组Ainv = np.linalg.inv(A),然后使用 将它与第二个数组相乘,我得到了第三个 2x1 数组,其中包含我想要的 x 和 y 值,该数组由顺便Ainv.dot(B)调用的函数返回。solveLin()

现在,如果我用适当的变量打印出来print(solveLin()),我会得到[[-8.] [ 5.]]具有正确值的数组。

但是,如果我将这些值作为目标print(solveLin()[0][0]),例如,我会得到-7.9999999999999984.999999999999999作为我的答案。

如果我将它们设置为显示为整数,它们将变为 -7 和 4

编辑:我确实理解为什么浮点数会这样,但我不明白为什么它们在数组中以一种方式显示,然后在直接调用时以另一种方式显示。

4

2 回答 2

0

Numpy 试图提供帮助并打印可读的东西。有关它在做什么的详细解释,请参阅this 。

在 python 调用 str 和 str 中打印不会打印精确的东西,只是提供信息。repr() 用于精确表示。

于 2019-03-30T19:45:41.720 回答
0

从根本上说,这是因为二进制(numpy 用来处理数字)很难用十进制精确表示,反之亦然。看看我们如何习惯用十进制表示三分之一,0.33333333.. 在 python 中,0.1 是 0.100000000000000005551115123125.. 这是 python 文档中关于此事的链接:十进制定点和浮点运算

于 2019-03-30T20:08:16.337 回答