поиск индекса элемента массива, который является первым ниже заданного значения в MATLAB

если у меня есть данный массив, скажем:

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);

это дает мне результат, который я ищу, однако он кажется немного «хакерским», а вовсе не «матлабби».. может кто-нибудь предложить, как я могу улучшить этот код?


person guskenny83    schedule 13.10.2015    source источник


Ответы (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)
person gregswiss    schedule 13.10.2015
comment
я был после индекса этого значения, но я могу сделать это, просто изменив 5-ю строку вашего кода на [~, результат] = max (a (a ‹ t)); я думаю.. спасибо! - person guskenny83; 13.10.2015
comment
@ guskenny83, к сожалению, это даст вам только индекс в массиве элементов меньше t. - person gregswiss; 13.10.2015
comment
о, конечно .. можно ли как-нибудь сохранить исходный индекс? - person guskenny83; 13.10.2015
comment
Есть ли способ, используя ваш метод, чтобы, если t меньше наименьшего элемента, он мог выбрать индекс наименьшего элемента? в настоящее время он просто выбирает индекс 1.. - person guskenny83; 13.10.2015
comment
можно ли считать, что элементы a положительны? - person gregswiss; 13.10.2015
comment
Да. И что они всегда добавляют к 1 - person guskenny83; 14.10.2015