Найти векторные элементы, соответствующие двум условиям в MATLAB

у меня есть вектор a = [1 5 3 4 2]. Я хочу найти все элементы, которые 1<a<5. Как это сделать в Matlab?

лично я разработал одно решение, но оно громоздкое:

a = [1 5 3 4 2];
ix = find(a>1);
ix = ix(find(a(ix)<5));
disp(a(ix))

что может быть лучше?

3 ответов


использовать логические индексации:

>> a = [1 5 3 4 2];
>> a = a(1 < a & a < 5)
a = 
    3    4    2

простая настройка вашего кода упростит его:

a = [1 5 3 4 2];
disp(find(a>1&a<5))

для ismember является хорошим выбором для дискретных случаев

a = [1 5 3 4 2];
find(ismember(a, 2:4))