Numpy:浮点比较

时间:2017-03-11 14:43:13

标签: python numpy floating-point

我有这样的代码片段:

eps = 0.1
xx = np.array([[1,2,3], [4,5,6], [7,8,9]])
yy = np.array([[1.1,2.1,3.1], [4.1,5.1,6.1], [7.1,8.1,9.2]])
dif = np.absolute(xx - yy)
print dif
print dif < eps

结果:

[[ 0.1  0.1  0.1]
[ 0.1  0.1  0.1]
[ 0.1  0.1  0.2]]

[[False False False]
[ True  True  True]
[ True  True False]]

为什么我们得到这样的结果?在第一行中,比较是正确的,但在第二行和第三行中,结果对我来说是意外的。

这是因为浮动比较和浮点? 在家伙的帮助下,我理解了这个问题!

1 个答案:

答案 0 :(得分:1)

是的,这是因为像3.1等数字并不能完全表示为浮点数。即使不使用numpy,您也可以查看它:

>>> 3.1 - 3 < 0.1
False
>>> 4.1 - 4 < 0.1
True

可以使用decimal模块更详细地检查内部结构:

>>> from decimal import Decimal
>>> Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>> Decimal(3.1)
Decimal('3.100000000000000088817841970012523233890533447265625')
>>> Decimal(4.1)
Decimal('4.0999999999999996447286321199499070644378662109375')