在 MATLAB 中如下for
loop:
for i = [1:100]'
%'// Do something, such as disp(i)
end
显然并不是真正通过迭代实现的,而是i
变成矩阵 [1 2 3 ... 100] 并且“循环”仅在此矩阵上执行一次i
。您可以通过打印以下值来验证这一点i
或其他跟踪信息。仅通过一次循环。
是否可以强制 MATLAB 进行真正的循环?我问的原因是,上述方法在许多情况下都很好,但当您有需要运行的嵌套循环时会更加痛苦。
Example:
如果您认为自己在循环上进行了实际迭代,则以下代码将不会执行您所期望的操作:
for i = outlier
data(i) = median(data(i-100:i+100))
end
人们期望在每个离群值索引处,这会将 data(i) 替换为从 i-100 到 i+100 的数据中位数,但事实并非如此。事实上,中位数返回根据您关心的所有范围的组合计算的单个值,并且每个 data(i) 点都替换为该单个值。
如果你写
for i = (1:100)' %'# square brackets would work as well
doSomething
end
循环只执行一次,因为for
-loop 遍历所有columns等号右侧的任何内容(它将使用等号右侧的 100×200 数组迭代 200 次)。
但是,在您的示例中,您有i=[1:100]
,其计算结果为行向量。因此,循环应该执行 100 次。
如果你迭代一个数组,可能是nx1
代替1xn
,出于安全原因,您可以写:
for i = myArray(:)' %'# guarantee nx1, then transpose to 1xn
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)