在MATLAB中,如果满足某些条件,如何跳过预定数量的for循环迭代?

时间:2013-06-25 18:44:53

标签: matlab for-loop continue

在Matlab中,我在for循环期间执行计算,但是如果满足某些条件,我试图在for循环期间找到跳过迭代的方法。我已经写了一个简单的例子来说明我的问题。

在下面的代码中,for循环将经历迭代1和2,并按预期输出到r。 r(1)将为1,并且r(2)将为2.一旦for循环运行迭代3,则将值20放入r(3)。发生这种情况之后,我希望for循环跳过接下来的5次迭代,直接进入for循环的迭代8。

for i=1:1:10
    if i==3
        r(i)=20;
        i = i+5;
    else
        r(i) = i;
    end
end

r的实际结果如下:

r =

 1     2    20     4     5     6     7     8     9    10

但是,我希望结果看起来类似于以下内容。 (请注意我不打算填充所需的r(4):r(7)为0,而是希望完全跳过循环迭代4到7。)

r =

 1     2    20     0     0     0     0     8     9    10

如果有人有建议,我们将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:7)

使用while循环代替for循环手动递增:

i=1;  // index for loop
k=1;  // index for r
r = zeros(1,10) // pre-allocate/cut is faster
while i <= 10
  if i == 3
    r(i)=20;
    i = i+5;  // skip multiple iterations
  else
    r(k)=i; 
    i=i+1;    // loop increment
    k=k+1;    // vector increment
  end
end
r(k+1:end) = []; // Remove unused portion of the array

答案 1 :(得分:2)

最基本的实现是省略循环中的那些。

for i=  [1:3 8:10]
   if i==3
       r(i)=20;
   else
       r(i) = i;
   end
end

但是,如果您确实需要动态确定循环索引,那可能无法满足您的需求。在这种情况下,使用while循环,如下所示:

i = 1;
while i <= 10
   if i==3
       r(i)=20;
       i = i+5;
   else
       r(i) = i;
       i = i+1
   end

正如您所看到的,当您尝试通过for循环更改索引变量时会出现问题。

答案 2 :(得分:0)

如果您知道在哪里跳过,您可以执行类似

的操作
ind = [1:2,8:10]
r(ind) = ind
r(3) = 20

这样你也可以避免循环。如果在跳过之前无法确定循环使用两个不同的循环并使用 break 关键字来停止第一次迭代。