MATLAB: найдите функцию в пределах диапазона

Как я могу использовать функцию find в определенных диапазонах.

Скажем, у меня есть массив arr1 со случайными значениями. У меня есть начальные и конечные индексы частей, которые я хотел бы проанализировать (в этом примере я хочу найти первое вхождение, когда значение больше 0,8)

Как здесь можно использовать функцию find с начальным и конечным индексами, а также с условием?

Например:

arr1 = rand(1000,1);
start_ind = [100;500;850];
end_ind = [160;620;925];

for i = 1:length(start_ind)
    output = find(arr1(start_ind(i):end_ind(i)) >=0.8); % ????
end 

Очень признателен,


person Bensa    schedule 07.07.2016    source источник


Ответы (1)


Используйте второй аргумент find, чтобы получить только первое совпадение. Затем вы можете сдвинуть индексы, добавив start_ind - 1:

arr1 = rand(1000,1);
start_ind = [100; 500; 850];
end_ind = [160; 620; 925];

output = zeros(length(start_ind), 1);
for i = 1:length(start_ind)
    output(i) = find(arr1(start_ind(i):end_ind(i)) >=0.8, 1) + start_ind(i) - 1;
end 
person nirvana-msu    schedule 07.07.2016
comment
Спасибо за вашу помощь nirvana-msu. Это хорошо работает, если в данном случае найдено значение выше 0,8. Однако в противном случае будет выдано неправильное назначение с ошибкой прямоугольной пустой матрицы. - person Bensa; 11.07.2016
comment
Нашел. Добавление этой второй строки кода заставит его работать, если значение не найдено: output = find(boost(str_ind(i):end_ind(i)) >=165, 1) + str_ind(i) - 1; index(i,1:length(output)) = output; Спасибо. - person Bensa; 11.07.2016