#matlab #curve-fitting
#matlab #подгонка кривой
Вопрос:
У меня есть 70 x 345600
матрица data_in
. Каждый из его столбцов представляет собой выборку данных с шагом 70 по времени. Я обучаю эти данные, подгоняя к ним кривую, используя следующий цикл.
output = zeros(30,345600);
for i = 1:345600
ft_ = fittype('linearinterp') %// I am using a proper model
targets = data_in(:,i);
inputs = (1:70)';
cf_ = fit(inputs,targets,ft_);
output(:,i) = cf_(71:100);
end
В настоящее время с циклом это занимает около часа и 20 минут. Есть ли способ ускорить этот код
Комментарии:
1. Это не решение, а просто небольшая оптимизация… Добавив дополнительный
targets2 = data_in(:,i 172800);
, вы сможете вдвое сократить количество циклов. Также ваше определениеft_
иinputs
фиксировано, что означает, что вы должны выполнять их вне цикла, что еще больше сокращает необходимое время. Потому что вы не будете перезаписывать их в каждом цикле с теми же значениями снова…2. @TheMinion вывод объявления
ft_
и входных данных за пределы цикла может сократить время. Но добавление дополнительных целей и последующее повторное использованиеfit
функции приведет к тому жеfit
количеству вызовов . Следовательно, сложность останется прежней3. Это похоже на задание для проверки кода .