2014-10-27 4 views
2

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

Здесь gamma_ic & Лук - это двумерные матрицы. c & z - переменные, заданные из внешних итераций.

for z=1:maxNumber, 
    for c=1:K, 
     n = 0; 
     for y2=1:number_documents, 
      n = n+(gamma_ic(y2,c)*bow(y2,z)); 
     end 
     mu(z,c) = n/2.3; 
    end 
end 

Цените свою помощь.

Редактировать. Добавлен цикл для c и z. Итерация продолжается до максимальных индексов в гамма-диапазоне & лук. Добавлена ​​mu, которая является еще одной двумерной матрицей, чтобы показать использование n.

+0

ли '' c' и z' перебора всех возможных индексов для '' gamma_ic' и bow' соответственно? Я думаю, что стоит показать, как они повторяются, и как вы используете 'n'. Также любые мысли или понимание, которые у вас есть о векторизации (это может быть легко или сложно для векторизации вашего кода, но было бы хорошо понять, что блокирует вас и попытаться исправить это) –

+0

Если вы делитесь кодами цикла для 'c' и 'z', мы могли бы также помочь избавиться от этих циклов. Но для данного кода вы можете попробовать - 'n = sum (gamma_ic (1: number_documents, c). * Bow (1: number_documents, z))' – Divakar

+0

Я обновил код с соответствующими частями внешних циклов. –

ответ

1

Это должно работать для вас, чтобы получить mu, который, как представляется, желаемый результат -

mu = bow(1:number_documents,1:maxNumber).'*gamma_ic(1:number_documents,1:K)./2.3 
+0

. Я немного запутался здесь, будут ли размеры согласны выполнять элементарную операцию? Обратите внимание, что 'K' может быть не равно' maxNumber'. Изменить: получилось, вот почему вы принимаете транспонирование, я полагаю? Сначала проигнорировал его –

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