2012-03-19 4 views
1

Я не совсем понимаю, что мы имеем в виду с помощью вектора мышления, в основном из-за простых примеров, приведенных в документации, и я надеюсь, что кто-то может помочь мне понять это немного лучше.Векторизация кода

Итак, я пытаюсь выполнить выборку NxN из матрицы ncols x nrows x ielements и вычислить среднее значение для каждого элемента и сохранить максимум средних значений. Использование для петель, код будет выглядеть следующим образом:

for x = 1+margin : nrows-margin 
    for y = 1+margin : ncols-margin 
     for i=1:ielem 
      % take a NxN sample 
      sample = input_matrix(y-margin:y+margin,x-margin:x+margin,i) 
      % compute the average of all elements 
      result(i) = mean2(sample); 
     end %for i 
     % store the max of the computed averages 
     output_matrix(y,x)=max(result); 
     end %for y 
    end %for x 

может кто-нибудь сделать хорошую векторизации этого примера ситуации? T

+0

Возможно, вам стоит посмотреть на функции 'conv2' или' filter2'. –

+0

Я буду, но есть ли другой способ векторизовать этот тип кода с помощью функций, подобных conv2 или filter2, и делать это, используя большее числовое индексирование? – VisLab

ответ

2

Прежде всего, векторизация не так важна, как когда-то, из-за улучшений в компиляции кода до его запуска, но это по-прежнему очень распространенная практика и может привести к некоторым улучшениям. Старая версия Matlab выполняла одну строку за раз, что оставило бы цикл for намного медленнее, чем векторная версия того же кода.

Часть вашей матрицы, которая может быть векторизованной, является внутренней для цикла. Я покажу простой пример того, что вы пытаетесь сделать, я позволю вам взять пример и поместить его в свой код.

input=randn(5,5,3); 
max(mean(mean(input,1),2)) 

В основном, внутренние два mean взять среднее значение входного массива, а внешний max будет найти максимальное значение в диапазоне. Если вы хотите, вы можете разбить его шаг за шагом и посмотреть, что он делает. mean(input,1) примет среднее значение по первому измерению, mean(input,2) над вторым и т. Д. После того, как будут выполнены первые два средства, все, что осталось, - это вектор, который будет работать с максимальной функцией. Следует отметить, что размер вектора pre-max равен [1 1 3], размеры сохраняются при выполнении этой операции.

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