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

在MATLAB中,如果满足某些条件,如何跳过预先确定的for循环迭代次数?,matlab,for-loop,continue,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;

在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
但是,我希望结果与下面类似。(请注意我不希望用0填充所需的r(4):r(7),而是希望完全跳过循环迭代4到7。)


如果有人有意见,我们将不胜感激。谢谢大家!

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

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
i=1;

while i使用
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
i=1;//循环索引
k=1;//r的索引
r=0(1,10)//预分配/切割速度更快

而我如果你知道该跳过哪一步,你可以这样做

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

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

感谢您提供的信息,包括有关预分配的附加信息!没问题,我通常使用大的向量,但这不是一个坏习惯顺便说一句,你的代码不起作用的原因是MATLAB实际上存储了它自己对for循环中使用的i的“引用”,所以当你可以得到i时,你不能编辑该值。我完全忘记了它是如何工作的,但我记得当我刚开始编程时,我查了一下,有点有趣haha@Shaun314-问题是,对于i=[…]
语句,
右侧的值数组中的每个循环过程,Matlab都会更新
i
,不要像典型的C和Java
for
循环那样从前面的
i
值更新它,而是使用类似(…;…;i++)的
之类的东西。因此,您实际上可以编辑
i
的值,但您的编辑只会持续到下一个循环过程,Matlab将忽略并覆盖它。(如果这是最后一次循环,那么您的更改将保持不变。)这是一个更好的解释,可以解释我的意图,谢谢!谢谢你的回复!感谢您的回复,但要跳过的迭代未知。
ind = [1:2,8:10]
r(ind) = ind
r(3) = 20