matlab中每行每列的双循环
Double loop for each column per row in matlab
下面的代码完成了它应该做的,并在一列中起作用。
%% 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
您根本不需要变量 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
函数。
下面的代码完成了它应该做的,并在一列中起作用。
%% 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
您根本不需要变量 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
函数。