我有这样的代码片段:
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]]
为什么我们得到这样的结果?在第一行中,比较是正确的,但在第二行和第三行中,结果对我来说是意外的。
这是因为浮动比较和浮点? 在家伙的帮助下,我理解了这个问题!
答案 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')