我无法弄清楚为什么(a中的b)在以下代码中返回为False。当我打印a和b时,很明显a实际上是b。
import numpy as np
a=np.arange(-.5,.5,0.04)
b = 0.46
print 'a=',a
print 'b=',b
print 'b in a:',(b in a)
有人可以建议成功进行此检查吗?
答案 0 :(得分:4)
浮点数很少精确......换句话说,你可能只是一个非常小的数字(大约1e-16
) - 但numpy
选择代表数字与字符串相同,因为大部分时间,额外的精度只是噪音,会掩盖您实际想要看到的数据。
问题的一个可能解决方案是将numpy.isclose
与ndarray.any
结合使用:
np.isclose(a, b).any()
答案 1 :(得分:1)
欢迎来到花车......看看这个:
import numpy as np
a=np.arange(-.5,.5,0.04)
b = 0.46
print('a in b:',(b in a))
False
print('a in b:',(-0.5 in a))
True
print('a in b:',(-0.46 in a))
True
print('a in b:',(-0.42 in a))
False
当您从数组的开头慢慢移开时,浮点数在长有效数字时不再相同,但计算机仍然只显示最多2个小数点。
与说0.4400000000000001 == 0.44
相同,如果你看起来像是2位小数点,但是计算机当然不会认出它。