if语句可跳过循环中的某些值

时间:2018-07-02 10:45:40

标签: matlab loops for-loop if-statement

我有一个XY值范围,并且我有一个域,我不想计算其中的节点的值。我想在Matlab的循环中有一个if语句来跳过这些语句。

例如:

  • 范围:X = [1:20]Y = [1:20]
  • 我想忽略以下范围内的节点:X = [5:7]Y = [12:14]

我认为代码应该是这样的:

for X=1:20
    for Y=1:20
        if X=5:7 & Y=12:14
            return
        end
        % the operation here !
        T(X,Y) = lab lab lab
    end
end

但是,我不确定如何正确编写条件。

2 个答案:

答案 0 :(得分:2)

您可以使用ismemberany==的组合作为条件,并且continue是用于跳至下一个循环索引的命令... < / p>

% ismember example
for X = 1:20
    for Y = 1:20
        if ismember( X, 5:7 ) && ismember( Y, 12:14 )
            continue
        end
        % your loop operations
    end
end

在这种情况下,您可以将if条件替换为

if any( X == 5:7 ) && any( Y == 12:14 )

答案 1 :(得分:1)

我提出了Wolfie解决方案的一种替代方案,可以预先生成所有索引,然后应用一个循环:

Xvect = repmat(X, length(Y), 1);
Yvect = repmat(Y, 1, length(X));
Xvect = Xvect(:);
Yvect = Yvect(:);

Xis5to7 = (Xvect >= 5) & (Xvect <= 7);
Yis12to14 = (Yvect >= 12) & (Yvect <= 14);
XYcomb = ~(Xis5to7 & Yis12to14); % This is the range to exclude, negate it.

allX = Xvect(XYcomb);
allY = Yvect(XYcomb);
(par)for i = 1 : length(allX);
   X = allX(i);
   Y = allY(i);
   Ltemp(i) = ...;
end
L(XYcomb) = Ltemp;

优点是可以预先显示组合(allX, allY),而且由于有单个循环,因此非常适合将parfor制作出来。