if statement for range of array values

5 vues (au cours des 30 derniers jours)
Trader
Trader le 9 Mai 2012
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 commentaire
Oleg Komarov
Oleg Komarov le 9 Mai 2012
Trivial question, do you want the condition to be verified on any (&&) of the 3 consecutive values or on all (&)?

Connectez-vous pour commenter.

Réponses (3)

Wayne King
Wayne King le 9 Mai 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 commentaires
Jan
Jan le 9 Mai 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.
Richard Brown
Richard Brown le 9 Mai 2012
Hence golf :)

Connectez-vous pour commenter.


Dr. Seis
Dr. Seis le 9 Mai 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 commentaires
Dr. Seis
Dr. Seis le 9 Mai 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
Richard Brown le 9 Mai 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

Connectez-vous pour commenter.


Richard Brown
Richard Brown le 9 Mai 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

Catégories

En savoir plus sur Variables dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by