def _closest_to(self, vals, x):
''' returns the value in vals closest to x '''
closest = vals[0]
closest_dist = abs(x-closest)
for val in vals[1:]:
cur_dist = abs(x-closest)
if cur_dist < closest_dist:
closest = x
closest_dist = cur_dist
return closest
答案 0 :(得分:6)
对绝对差值使用min
,得到最小差值的索引作为第二个输出参数。然后,您可以使用该索引查找最接近的值。
您将该功能称为closestValue = closest_to(values,target)
function closest = closest_to(vals,x)
%#CLOSEST_TO returns the value in vals closest to X
delta = abs(vals-x);
[~,minIdx] = min(delta);
closest = vals(minIdx);
如果要保存一行代码,可以用
替换最后两行closest = vals(delta == min(delta));
其中逻辑比较创建一个逻辑向量,其中delta取其最小值。请注意,如果closest
中的最接近值存在平局,则代码的两个版本都将返回vals
的值数组。