如果你只对True/False的结果感兴趣,那么这应该可以实现:
In [1]: (abs(arr_f - a) < t).any()
Out[1]: True
说明:对于abs(arr_f - a) < t
,返回一个布尔数组,然后调用any()
以查找其中是否有任何一个值为True
。
编辑 - 比较这种方法和其他答案中建议的方法,发现这种方法略微更快:
In [37]: arr_f = np.arange(0.05, 0.75, 0.008)
In [38]: timeit (abs(arr_f - a) < t).any()
100000 loops, best of 3: 11.5 µs per loop
In [39]: timeit np.isclose(arr_f, a, atol=t).any()
10000 loops, best of 3: 44.7 µs per loop
In [40]: arr_f = np.arange(0.05, 1000000, 0.008)
In [41]: timeit (abs(arr_f - a) < t).any()
1 loops, best of 3: 646 ms per loop
In [42]: timeit np.isclose(arr_f, a, atol=t).any()
1 loops, best of 3: 802 ms per loop
另一种解决方案是返回相关索引,代码如下:
In [5]: np.where(abs(arr_f - a) < t)[0]
Out[5]: array([27, 28])
这意味着
arr_f
中索引27和28的值在所需范围内,确实如此:
In [9]: arr_f[27]
Out[9]: 0.26600000000000001
In [10]: arr_f[28]
Out[10]: 0.27400000000000002
使用这种方法还可以生成一个True/False结果:
In [11]: np.where(abs(arr_f - a) < t)[0].any()
Out[11]: True
numpy.isclose(a,arr_f, atol=t)
是最好的答案,如下所示! - Mazdak(abs(arr_f - a) < t).any()
更好? - Yoelnumpy
方法!它的优点在于此! - Mazdakabs(arr_f - a) / max(abs(arr_f), abs(a))
,以及一个公差值,可能为1E-5
或1E-6
。我预计numpy也提供了这样的机制;isclose()
方法可能会提供它 - 实际上,您可以使用rtol=t
来指定相对公差,而不是建议的atol=t
。 - Jonathan Leffler