2013-12-18 3 views
-2

Правильно, я действительно довольно новичок в концепции векторизации, но я пытаюсь обойти его. В настоящее время я пытаюсь адаптировать некоторые из кода, который я написал для реализации оператора кэнний в векторизованную форму и то, что я не понимаю, почему это:Векторизованная версия кода matlab дает отличный результат для стандартного цикла

for r=1:fsize 
    for c=1:fsize 
     mask(r,c) = mask(r,c)/Z; 
    end 
end 

производит различный результат этого:

mask(r:fsize,c:fsize) = mask(r:fsize,c:fsize)/Z; 

Когда я понимаю, что они должны делать то же самое?

+0

Это простая опечатка во втором случае. –

+0

@MattPhillips Где? –

+0

'c' и' r' должно быть '1'. –

ответ

1
for r=1:fsize 
    for c=1:fsize 
     mask(r,c) = mask(r,c)/Z; 
    end 
end 

эквивалентно

mask(1:fsize, 1:fsize) = mask(1:fsize, 1:fsize)/Z; 

Примечание - 1:fsize не c:fsize.

Предполагается, что Z является константой. Было бы немного быстрее сделать * (1/Z) - выполнить разделение только один раз, а затем умножить ...

3

Что такое r, что такое c во втором решении? Возможно, вам нужно поэлементное деление ./:

mask = mask./Z; 

Если это не решит вашу проблему, укажите входные данные для воспроизведения.

+0

r и c - индексы матрицы, которые должны начинаться с 1. Видимо, я забыл их определить (я не могу сделать это inline) .... –

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