# How to find elements of a vector falling between minimum and maximum of an other vector without loop.

2 views (last 30 days)
Levente Gellért on 4 Jul 2021
Dear Community,
is there other way, than a loop to find elements in a vector b falling between the minimum and the maximum of vector a?
Let's say:
a=(1:1:10);
b=[5.5 11];
for i=1:length(b)
if b(:,i)>min(a) && b(:,i)<max(a)
c(:,i)=1;
else
c(:,i)=0;
end
end

Sulaymon Eshkabilov on 4 Jul 2021
Logical indexing is the best option, e.g.:
a=(1:1:10);
b=[5.5 11; 13, 3; 10.5 10];
IDX = find(b>min(a) & b<max(a));
C(IDX)=1;
##### 2 CommentsShowHide 1 older comment
Levente Gellért on 6 Jul 2021
Dear All, many thanks for the nice comments! lg

Yazan on 4 Jul 2021
c = zeros(size(b));
c(b>min(a(:)) & b<max(a(:))) = 1;
##### 2 CommentsShowHide 1 older comment
Levente Gellért on 6 Jul 2021
Dear All, many thanks for the nice comments! lg

dpb on 4 Jul 2021
>> iswithin(b,min(a),max(a))
ans =
1×2 logical array
1 0
>>
is a common-enough idiom I have a utility function for the purpose--
>> function flg=iswithin(x,lo,hi)
% returns T for values within range of input
% SYNTAX:
% [log] = iswithin(x,lo,hi)
% returns T for x between lo and hi values, inclusive
flg= (x>=lo) & (x<=hi);
end
It isn't any different than writing the logical expression in line except as a function it has the advantage of moving the test to a lower level that is often very helpful in writing concise, legible expressions at the user level.
Levente Gellért on 6 Jul 2021
Dear All, many thanks for the nice comments! lg

Matt J on 5 Jul 2021
a=(1:1:10);
b=[5.5 11];
[~,~,c]=histcounts([0,5.5,10,11],[min(a),max(a)+eps(max(a))])
c = 1×4
0 1 1 0
Levente Gellért on 6 Jul 2021
Dear All, many thanks for the nice comments! lg