Избегайте цикла при использовании инструмента подгонки кривой в matlab

#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. Это похоже на задание для проверки кода .