在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)点都被该单个值替换。
答案 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确实鼓励矢量化,但你绝对可以使用上面使用的编码风格的传统循环。