【问题标题】:if statement to skip certain values in loopif语句跳过循环中的某些值
【发布时间】:2018-07-02 10:45:39
【问题描述】:
我有一个X 和Y 值范围,并且我有一个域,我不想计算其中节点的值。我想在 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
但是,我不确定如何正确编写条件。
【问题讨论】:
标签:
matlab
loops
for-loop
if-statement
【解决方案1】:
您可以使用ismember 或any 和== 的组合作为条件,continue 是跳到下一个循环索引的命令...
% 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 )
【解决方案2】:
我提出了 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。