Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
AndreyL
1 / 1 / 1
Регистрация: 11.09.2013
Сообщений: 50
0

Можно ли векторизовать операцию, избавившись от цикла for?

14.02.2017, 07:29. Просмотров 395. Ответов 15
Метки (Все метки)

Дамы и Господа!

Возникла такая задача. Есть массив Х размерностью (n,m), два массива Y и V размерностью (k,m) и массив Р размерностью (k,1). Необходимо из каждой строки массива Х вычесть каждую строку массива Y, возвести это все в квадрат и поделить на строки массива V. После чего сложить элементы строк получившегося массива и сумму логарифмов строк массива V и прибавить к этому элемент массива Р. На выходе должен получится массив L размерностью (n,k). Довольно сумбурное объяснение, проще показать, как это сейчас делается в цикле:
Matlab M
1
2
3
4
5
for i=1:k
  xProm=bsxfun(@minus,X,Y(i,:)).^2;
  xProm=bsxfun(@rdivide,xProm,V(i,:));    
  L(:,i)=-0.5*(sum(xProm,2)+sum(log(V(i,:)),2))-sumconst+P(i);
end;
умножение на -0.5 и скалярное слагаемое sumconst в этой операции - это фактически вычисление логарифма произведения плотностей нормальных распределений с центрами Y, дисперсиями V и логарифмами априорных вероятностей Р. Разбивка на три строки сделана исключительно для наглядности, можно все записать в одну строку, смысл от этого не изменится.

Вопрос такой - можно ли векторизовать эту операцию, избавившись от цикла for? В этом цикле алгоритм живет львиную долю времени - хотелось бы его разогнать.

Вернуться к обсуждению:
Можно ли векторизовать операцию, избавившись от цикла for?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2017, 07:29
Готовые ответы и решения:

Как векторизовать этот цикл?
Всем привет. Есть проблема с векторизацией одного цикла в программке,...

Можно ли оптимизировать код, избавившись от его повторяющихся (похожих) участков
Здравствуйте, помогите пожалуйста расписать код что сначыт каждая строчка, те...

Показать, что любой оператор цикла while можно записать с помощью цикла repeat
Показать, что любой оператор цикла с предусловием можно записать с помощью...

Векторизовать размытую линию
Доброго времени! Собственно сабж. Проблема в том что линия на картинке не...

Улучшить калькулятор, чтобы можно было продолжить операцию
Написал простейший калькулятор,но нужно сделать так,что бы можно было...

15
Другие темы раздела
Matlab БПФ для прямоугольного и треугольного импульсов http://www.cyberforum.ru/matlab/thread1919041.html
Здравствуйте! Я понимаю, что тема заезжена, но я не могу сообразить, как сделать. Подскажите, пожалуйста, мне надо получить БПФ для импульсов на рисунке №1 и №3. у меня не получается задать...
Matlab Ограничить область графика Добрый день. Есть код в MATLAB который строит график нескольких функций. Необходимо ограничить область красного графика, что бы не было горизонтальных полос. Код прилагаю. Помогите, пожалуйста. Сам... http://www.cyberforum.ru/matlab/thread1919010.html
Трендовая модель методом полиномов Чебышева Matlab
Здравствуйте! Мне было дано задание: "Решить задачу структурно - параметрической идентификации трендовой модели методом полиномов Чебышева" и реализовать это в Matlabе. Подскажите пожалуйста, как это...
Выполнить операцию логарифмического контрастирования изображения Matlab
Задано цифровое изображение в формате jpeg (24 битное). Для изображения выполнить операцию логарифмического контрастирования.
Matlab Функция solve на разных компьютерах работает по-разному http://www.cyberforum.ru/matlab/thread1918456.html
Здравствуйте. вот такая интересная задача: matlab 2014 b, и на том и на другом компьютере. на одном все правильно, а на другом получаю такой ответ: solve('z = a*X^b*Y^c', 'X') ответ: ans = ...
Matlab Прямой метод Хироты, N- солитонное решение Здравствуйте, форумчане. Помогите, пожалуйста, с написанием программы решения функции искомая функция {f_N} = \sum\limits_{\mu = 0,1} {\exp \left( {\sum\limits_{i = 1}^N {{\mu _i}\left(... подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru