for循环不会迭代

时间:2011-10-19 13:44:49

标签: matlab for-loop

在MATLAB中,以下for循环:

for i = [1:100]' 
    %'// Do something, such as disp(i)
end

显然不是通过迭代实现的,而i成为矩阵[1 2 3 ... 100],而“循环”仅在此矩阵i上执行一次。您可以通过打印i的值或其他跟踪信息来验证这一点。只有一次通过循环。

是否有可能强制MATLAB进行真正的循环?我问的原因是上面的方法适用于许多情况,但是当你有需要运行的嵌套循环时会更加痛苦。

示例
如果您认为在循环中进行实际迭代,则以下代码将无法执行您期望的操作:

for i = outlier
    data(i) = median(data(i-100:i+100))
end

可以预期,在每个异常值指数中,这将用i-100到i + 100的数据的中值替换数据(i),但事实并非如此。实际上,中位数返回在您关注的所有范围的集团上计算的单个值,并且每个数据(i)点都被该单个值替换。

2 个答案:

答案 0 :(得分:12)

如果你写

for i = (1:100)' %'# square brackets would work as well
   doSomething
end

循环只执行一次,因为for - 循环遍历等号右边的所有(它将以100-迭代200次)等号右边的by-200数组)。

但是,在您的示例中,您有i=[1:100],它会计算为行向量。因此,循环应该执行100x。

如果迭代可能是nx1而不是1xn的数组,出于安全原因,您可以写一下:

for i = myArray(:)'  %'# guarantee nx1, then transpose to 1xn
end

答案 1 :(得分:7)

这不正确。代码:

for i=1:100
    disp(i)
end

将连续打印所有值1到100。虽然Matlab确实鼓励矢量化,但你绝对可以使用上面使用的编码风格的传统循环。