【发布时间】:2011-10-19 13:44:49
【问题描述】:
在 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
人们会期望在每个异常值索引处,这会将 data(i) 替换为从 i-100 到 i+100 的数据的中位数,但事实并非如此。事实上,中位数返回一个由您关心的所有范围组合计算得出的单个值,并且每个 data(i) 点都被替换为该单个值。
【问题讨论】:
-
您能否发布重现您所见内容的输出。没见过这种行为,在Matlab中关注过for循环。
-
你不是说
median(data(i-100:i+100))吗? (带“:”) -
@Clement J. 是的,我愿意。现已更正。