Следующий код делает то, что он должен и работает в одном столбце.Двойной цикл для каждого столбца в строке в 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, однако следующий код не удается (я начинаю с тремя столбцами по причинам времени).
%% 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
Что не так с кодом? При случайной матрице 200x200 она работает без каких-либо исключений, и поскольку вы не описали предполагаемое поведение, невозможно сказать, чего вы хотите. – Daniel
Используйте индексирование столбцов там - 'zeros (i-3: i, k) = 1' и в конце измените значения z на z (zeros) = NaN'. В качестве хорошей практики используйте другое имя переменной, чем 'zeros', которая является встроенной функцией MATLAB. – Divakar
@ Даниэль, это странно, мне показалось, что я описал предполагаемое поведение с помощью кода, который работает для одного столбца. – Frank