使用numpy在接近公差范围内浮动的数组中查找第一个元素的索引

加布里埃尔

我需要找到数组中第一个元素的索引,该索引在给定公差范围内接近浮点数。

我可以使用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将引发异常。

好处

  1. 它不消耗内存,因为它不需要计算所有可能的值并存储它们。
  2. 如果已找到所需的值,它不会继续循环遍历数组,因此速度很快。
  3. 如果找不到值,它将引发异常。
  4. 可以很容易地将其转换为一种函数:

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Python中的numpy数组中查找具有条件的第一个元素的索引

在不包含在另一个范围内的范围内查找第一个元素

numpy索引:二维数组中每行的第一个(可变)元素数

查找在 numpy 数组中多次出现的第一个元素

C#擅长如何在使用范围内查找第一个单元格。

使用VBA在Excel范围内查找第一个公式的最快方法是什么?

在位范围内查找第一个置位的位置

从一个数组中查找不同数组中某个元素范围内的元素

for循环在“列表的第一个元素”范围内

如何跳过For Each循环语句中范围内的第一个元素?

使用段树查找范围内第一个和最后一个元素,第二个和倒数第二个的乘积之和,依此类推

查找大于阈值的NumPy数组的第一个和最后一个元素

如何在列表的公差范围内找到与上一个元素匹配的下一个元素?

使用 VBA 识别固定范围内的第一个空列

使用VBA识别特定范围内的第一个空列

查找第一个偶数元素并输出索引

查找重复元素的第一个索引

查找在数组中找到的第一个重复元素的索引

查找第一个零元素而忽略numpy数组中的前导零

numpy-返回数组中元素的第一个索引

NumPy数组中的第一个和最后一个元素

使用不带索引的数组名称将获取Bash中的第一个数组元素,好吗?

查找包含“-”的数组的第一个元素

在一个范围内的VBA数组中查找至少一项

TSQL - 范围内的第一个和最后一个数字

tableview数组索引中的第一个单元格超出范围错误

在列表中查找第一个元素和索引匹配条件

使用$ indexOfArray查找第一个匹配元素$ gte的索引

保留数组的第一个索引元素和最后一个索引元素