如果我有一个给定的数组,请说:
a = 0.1333
0.2667
0.0667
0.5333
我希望找到最接近的值,但仍然小于:
b = 0.29
这样做的最佳方式是什么?到目前为止我一直这样做的方式是:
% add extra column for indices and sort by values
A = [(1:length(a))', a];
A = sortrows(A, 2);
% iterate along value column of A
for ii = 1:length(A)
if A(ii,2) < b
continue
else
ii = ii - 1;
break
end
end
% get corresponding value from index column in this case 2
idx = A(ii,1);
这给了我正在寻找的结果,但感觉有点“hacky”而根本没有“matlabby”..有人可以建议我如何改进这段代码吗?
答案 0 :(得分:1)
此解决方案假设a
的元素始终为正数。
如果没有找到小于t
的元素,则会根据需要返回该数组的最小元素。
a = [0.1333 0.2667 0.0667 0.5333];
t = 0.29;
% a2 is a copy of a but where elements bigger or equal to t are set to opposite value
a2 = a;
a2(a >= t) = -a2(a >= t);
% find closest to 't' in 'a' that are below 't' - that is the maximum of the elements of a2
[~, idx] = max(a2);
result = a(idx);
% print result
disp(result)
disp(idx)