我需要找到数组中第一个元素的索引,它在给定的公差范围内接近浮点数。
我可以用一个for block来实现:
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
的 first 元素的索引,而不管a
数组后面可能有更接近的元素。我发现的解决方案对 * 最近 * 值的索引感兴趣,无论它位于数组中的哪个位置。
4条答案
按热度按时间pgpifvop1#
这里有一行代码:
这是什么?
括号中的代码是一个 * 生成器表达式 ,
next
返回(您猜对了!)生成器将产生的下一个(在本例中, 第一个 *)值。如果没有下一个值,则会引发StopIteration
异常。优点
1.它不消耗内存,因为它不需要计算所有可能的值并存储它们。
1.它的速度很快,因为如果已经找到所需的值,它不会继续循环遍历数组。
1.如果找不到值,它将引发异常。
1.它可以很容易地变成一行程序函数:
mbzjlibv2#
可以使用
numpy.where
:并且仅获得最低索引(即,第一个结果),由
where
返回。希望这对你有帮助。
jtoj6r0c3#
这是一个向量化的一行程序
逐步运行示例-
gopyfrb34#
来吧,伙计们!以上这些都不是强有力的。即使Divakar的答案失败,如果没有最接近的值,你会得到索引=0,这是一个错误。在这种情况下,它应该返回“None”。因此,至少一行程序是不可能的。原来的问题不是适定的。您需要考虑,“.如果在公差范围内没有这样接近的值怎么办?“然后给予在这种情况下该怎么做的具体说明。
这是公平的,但仍然需要处理一个空的结果。所以,我想说一行程序会很笨重,至少两行程序更好: