MATLAB Answers

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

2 ビュー (過去 30 日間)
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
Thanks for your suggestions! lg

採用された回答

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021 年 7 月 4 日
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 件のコメント
Levente Gellért
Levente Gellért 2021 年 7 月 6 日
Dear All, many thanks for the nice comments! lg

サインインしてコメントする。

その他の回答 (3 件)

Yazan
Yazan 2021 年 7 月 4 日
c = zeros(size(b));
c(b>min(a(:)) & b<max(a(:))) = 1;

dpb
dpb 2021 年 7 月 4 日
>> 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.

Matt J
Matt J 2021 年 7 月 5 日
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

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by