我需要找到数组中第一个元素的索引,该索引在给定公差范围内接近浮点数。
我可以使用for块来做到这一点:
import numpy as np
# Define array of floats
a = np.random.uniform(0., 10., 10.)
# Float to search, and tolerance.
val, tol = 6.87, 0.1
for i, _ in enumerate(a):
if np.isclose(_, val, tol):
print('Index is: {}'.format(i))
break
但我想知道是否可能存在使用某些numpy
功能的单线解决方案。
请注意,我对靠近的第一个元素的索引感兴趣val
,无论在a
数组下方是否有更靠近的元素。我发现的解决方案对最接近值的索引感兴趣,而不管它在数组中的什么位置。
这里是单线:
Index = next(i for i, _ in enumerate(a) if np.isclose(_, val, tol))
括号中的代码是生成器表达式,并next
返回(您猜对了!)生成器将生成的下一个值(在本例中为第一个)。如果没有下一个值,StopIteration
将引发异常。
可以很容易地将其转换为一种函数:
FirstIndex = lambda a, val, tol: next(i for i, _ in enumerate(a) if np.isclose(_, val, tol))
i = FirstIndex(a, val, tol) # call it
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句