检查numpy arange返回的值false

问题描述:

我试图检查一个数字是否在由numpy的arange函数生成的数组中。当我打印出数组中的所有值时,我可以看到我在找什么,但是当我使用in关键字时,它将返回False检查numpy arange返回的值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 

此任何解释?提前致谢!

浮点数不是无限精确的。您不能在IEEE浮点中精确指定数字3.6,因为小数部分以二进制而非十进制表示。阵列中的3.6是一个稍微不同的数字,与您正在测试的内容相比,接近于3.6。例如,如果我做

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

我知道这是令人困惑和烦人的,但这只是浮点数的工作方式。解决这个问题的方法是尝试使用整数来代替。 你想要做什么,需要测试包含浮点数组?你可以用整数来解决它吗?在你的具体情况下,你可以通过乘以10并转换为整数来做到这一点。

考虑毛哲豪的回答,以及你是否真的需要这个。也就是说,如果你真的需要做到这一点,可以考虑使用numpy的的isclose功能,然后numpy的的any

作为解释heredocumented here