Filter löschen
Filter löschen

Vectorise for loop checking for values in intervals

1 Ansicht (letzte 30 Tage)
TJ
TJ am 12 Jan. 2018
Kommentiert: TJ am 12 Jan. 2018
Hi there,
I have the following datasets:
a =
5
7
8
9
10
12
b =
3 6
11 13
20 22
I want to look if each element of a is in any of the intervals in b, without a for-loop. The for loop is:
result = zeros(length(a),1);
for i =1:length(a)
for j= 1:size(b,1)
if a(i)>=b(j,1) && a(i)<= b(j,2)
result(i) = 1
break;
end
end
end
I am hoping to speed this up.

Akzeptierte Antwort

Guillaume
Guillaume am 12 Jan. 2018
If using R2016b or later:
result = any(a >= b(:, 1).' & a <= b(:, 2).', 2)
Otherwise
result = any(bsxfun(@ge, a, b(:, 1).') & bxfun(@le, a, b(:, 2).'), 2)

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by