在MATLAB中查找低于给定值的数组元素的索引

时间:2015-10-13 00:40:15

标签: matlab vectorization

如果我有一个给定的数组,请说:

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”..有人可以建议我如何改进这段代码吗?

1 个答案:

答案 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)