У меня есть некоторый рабочий код в Matlab, и скорость очень важна.У меня векторизация / оптимизация многих его частей, и теперь профилировщик говорит мне, что большую часть времени тратится на небольшой кусок кода.Для этого
У меня есть несколько наборов параметров для многовариантного нормального распределения .
Затем мне нужнополучить значение из соответствующего PDF в некоторой точке pos,
и умножить его на некоторое другое значение, сохраненное в векторе.
У меня естьниже приведен минимальный рабочий пример:
num_params = 1000;
prob_dist_params = repmat({ [1, 2], [10, 1; 1, 5] }, num_params, 1);
saved_nu = rand( num_params, 1 );
saved_pos = rand( num_params, 2 );
saved_total = 0;
tic()
for param_counter = 1:size(prob_dist_params)
% Evaluate the PDF at specified points
pdf_vals = mvnpdf( saved_pos(param_counter,:), prob_dist_params{param_counter,1}, prob_dist_params{param_counter, 2} );
saved_total = saved_total + saved_nu(param_counter)*pdf_vals;
end % End of looping over parameters
toc()
Я знаю, что prob_dist_params
все одинаковы в этом случае, но в моем коде у нас каждый элемент отличается, в зависимости от нескольких вещей вверх по течению.Я называю этот фрагмент кода много десятков тысяч раз в моей полной программе, поэтому мне интересно, есть ли что-нибудь, что я могу сделать, чтобы векторизовать этот цикл , или, если это не удалось, ускорить егона всех ?Я не знаю, как это сделать с включением функции mvnpdf()
.