我有一个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
但是,我不确定如何正确编写条件。
答案 0 :(得分:2)
您可以使用ismember
或any
和==
的组合作为条件,并且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
制作出来。