if statement for range of array values
5 views (last 30 days)
Show older comments
Is there a better way to write this 'if' statement?
for i = 1:size(somevalue)
if (x(i) < xmax && x(i-1) < xmax && x(i-2) < xmax) || (y(i) < ymax && y(i-1) < ymax)
disp('do something');
end
Thanks for your help!
1 Comment
Oleg Komarov
on 9 May 2012
Trivial question, do you want the condition to be verified on any (&&) of the 3 consecutive values or on all (&)?
Answers (3)
Wayne King
on 9 May 2012
How about
if (any(x<xmax) || any(y<ymax))
disp('do something');
end
or do you really want to test if every one is? Of course it seems that x<xmax or y<ymax are to be always true.
4 Comments
Jan
on 9 May 2012
@Sean: This needs to create a temporary array of the length numel(x)+numel(y). Therefore I assume this is slower than Wayne's approach.
Dr. Seis
on 9 May 2012
I think what you might be after is something like:
if all(x(i-1:i+1) < xmax) || all(y(i-1:i+1) < ymax)
% something
end
2 Comments
Dr. Seis
on 9 May 2012
Misinterpreted your "if" statement on my previous attempt. This should be what you are after.
Note: "all" will return TRUE if and only if the entire array returned from "x<xmax" is all 1's. "any" will return TRUE if there is one or more 1 in the array returned by "x<xmax".
Richard Brown
on 9 May 2012
If doing it this way, the x indices should be i-2:i, and the y indices should be i-1:i, and the loop should start at 3
Richard Brown
on 9 May 2012
To check I've understood correctly, you only want to do something if the current and two preceding x values are all less than xmax, or, the current and preceding y values are both less than ymax. Then, the indices you are interested in are given by:
idx = find(filter([1 1 1], 1, x < xmax) == 3 | filter([1 1], 1, y < ymax) == 2)
Note that 1 and 2 will never appear in idx as your expression cannot be evaluated for these
0 Comments
See Also
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!