намиране на индекса на елемент от масив, който е първият под дадена стойност в 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);

това ми дава резултата, който търся, но ми се струва малко "хакерски" и изобщо не "matlabby".. може ли някой да предложи как мога да подобря този код?


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