繁体   English   中英

在数组中搜索最近的float值

[英]Searching For Closest float values in an array

我在尝试从数组中选择最接近的float值时遇到问题。 这是一些示例数据;

我要处理的数字始终具有这种镜像特性。

{-9,-3,-1,0,1,3,9}

如果我搜索-8.8,则期望返回-9。

如果我搜索8.8,则期望返回9。

过去,在数组中搜索最接近的值时,我会遍历数组,跟踪每个数组元素的绝对值减去所需的值。 最小的价值将获胜。

该方法对我来说是一个问题,因为数组中至少有两个数字是“最接近的”(在我上面的示例9和-9中)

您的数组将始终被排序,因此二进制搜索应适合于将候选集最大减少为2个数组值。 我只能想到如果原始数组包含浮点数,其中一些浮点数的差异小于机器精度,就会出现一个挑战。

如何最好地处理这种情况将取决于您的应用程序(如果不是一开始就很深奥的话); 但是请注意,所有与测试值无法区分的值都将在数组中形成一个连续的子序列,因此作为启发式方法,您可以选择该子序列的中间元素。

阵列已镜像的事实使此操作变得容易。 您最初可以忽略搜索值的符号,并且如上所述,您只需找到最接近的绝对值即可。 然后固定标志。

这是Python,但是它应该与伪代码足够接近,可以将其转换为所需的任何东西。

def find_closest(search_val):
    smallest_diff = float(inf)
    closest_val = 0
    # Search only positive half of array
    for val in [0, 1, 3, 9]:
        # Treat search_val as positive for now
        diff = abs(val - abs(search_val))
        if diff < smallest_diff:
            smallest_diff = diff
            closest_val = val
    # Correct sign of result
    if search_val < 0:
        closest_val = -closest_val
    return closest_val

如前所述,既然您的数字始终镜像在零附近,那么仅检查负数(假设数组已排序)。 您将避免提到的问题。 0.5呢? 它也有两个等距的数字。 你怎么打领带?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM