2015-01-24 2 views
0

Следующий код делает то, что он должен и работает в одном столбце.Двойной цикл для каждого столбца в строке в 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 
+0

Что не так с кодом? При случайной матрице 200x200 она работает без каких-либо исключений, и поскольку вы не описали предполагаемое поведение, невозможно сказать, чего вы хотите. – Daniel

+0

Используйте индексирование столбцов там - 'zeros (i-3: i, k) = 1' и в конце измените значения z на z (zeros) = NaN'. В качестве хорошей практики используйте другое имя переменной, чем 'zeros', которая является встроенной функцией MATLAB. – Divakar

+0

@ Даниэль, это странно, мне показалось, что я описал предполагаемое поведение с помощью кода, который работает для одного столбца. – Frank

ответ

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 в своем коде.

+0

Он делает то, что должен, спасибо! Есть ли способ ускорить процесс, как он, кажется, навсегда? – Frank

+0

@Frank Что такое datasize для 'z'? – Divakar

+0

@Divakar 479x1672. И это только меньший. – Frank

Смежные вопросы