[英]How to save an array with float values into a text file that is readable by Mac?
[英]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.