matlab中每行每列的双循环

时间:2015-01-24 10:55:08

标签: matlab for-loop

以下代码执行了它应该做的和一列的工作。

%% Working loop


z = HongKongPrices(1:end,114);

 zeros = false(size(z));

 r = size(z,1);
 c = size(z,2);


for i = 5:r
    if z(i) == z(i-4) && z(i) == z(i-3)
        zeros(i-3:i) = 1 
    end
end

z(zeros) = NaN

我正在尝试为每个基于HongKongPrices的列执行for循环,但是以下代码失败(由于时间原因,我从三列开始)。

 %% Non workling loop

 z = HongKongPrices(1:end,[80 85 115]);

 zeros = false(size(z));

 r = size(z,1);
 c = size(z,2);

 for k = 1:c
      x = z(1:end,k)
    for i = 5:r
        if x(i) == x(i-4) && x(i) == x(i-3)
            zeros(i-3:i) = 1 
        end
    end
 end

x(zeros) = NaN

1 个答案:

答案 0 :(得分:1)

根本不需要变量x。您可以在if语句中使用逻辑索引。而不是x(i),请使用x(i,k)等。当然,您必须对zeros执行相同操作。

z = HongKongPrices(1:end,[80 85 115]);

zeros = false(size(z));
r = size(z,1);
c = size(z,2);

for k = 1:c
    for i = 5:r
        if z(i,k) == z(i-4,k) && z(i,k) == z(i-3,k);
            zeros(i-3:i,k) = 1 
        end
    end
end

z(zeros) = NaN;

PS:zeros是一个Matlab函数,所以最好使用另一个变量名。像这样,您将无法在代码中使用zeros函数。