if statement for range of array values

9 次查看(过去 30 天)
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 个评论
Oleg Komarov
Oleg Komarov 2012-5-9
Trivial question, do you want the condition to be verified on any (&&) of the 3 consecutive values or on all (&)?

请先登录,再进行评论。

回答(3 个)

Wayne King
Wayne King 2012-5-9
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 个评论
Jan
Jan 2012-5-9
@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
Dr. Seis 2012-5-9
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 个评论
Dr. Seis
Dr. Seis 2012-5-9
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 2012-5-9
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
Richard Brown 2012-5-9
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

类别

Help CenterFile Exchange 中查找有关 Operators and Elementary Operations 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by