检查numpy arange中的值是否返回false

时间:2014-03-05 23:16:33

标签: python numpy

我正在尝试检查数字是否在numpy的arange函数生成的数组中。当我打印出数组中的所有值时,我会看到我正在寻找的内容,但当我使用in关键字时,它会返回False

示例:

d = np.arange(2.9, 3.7, 0.1)

>>> print d
[ 2.9  3.   3.1  3.2  3.3  3.4  3.5  3.6  3.7]
>>> 3.1 in d
True
>>> 3.6 in d
False
>>> 3.3 in d
False
>>> 3.2 in d
True

对此有何解释?提前谢谢!

2 个答案:

答案 0 :(得分:3)

浮点数不是无限精确的。您无法在IEEE浮点中精确指定数字3.6,因为小数部分以二进制而不是十进制表示。数组中的3.6是一个略微不同的数字,非常接近于您测试包含的数字。例如,如果我这样做

d = numpy.arange(0, 1, 0.1)
0.3 in d
>>> False
3 * 0.1 in d
>>> True

我知道这令人困惑和讨厌,但这只是浮点数的工作方式。解决这个问题的方法是尝试使用整数。 你想要做什么,需要测试在数组中包含一个浮点数?你能用整数来解决它吗?在您的特定情况下,您可以通过将所有内容乘以10并转换为整数来实现此目的。

答案 1 :(得分:1)

考虑这个毛泽东的答案以及你是否真的需要这个。也就是说,如果你确实需要这样做,请考虑使用numpy的isclose函数,然后是numpy的any

正如heredocumented here

所述