Мне в настоящее время нужно немного ускорить мой код и, следовательно, хочу использовать векторию вместо циклов. Следующий код (очень) упрощенная версия кода, который вызывается много во время моего расчета:Векторизация и векторная индексация
T=10; n=5; w0 = 25000; w1 = 23000; b0 = 15000;
vec = zeros(1,T+2*n+1); vec(1:n+1) = w0; vec(n+2:n+T+1) = b0; vec(n+T+2:T+2*n+2) = w1;
ref0=zeros(1,n);
for i = 1:n
ref0(i) = sum(vec(T+i+2:n+T+i+2));
end
Я попытался использовать векторизации, но, к сожалению, не похоже на работу, как только первая запись из моего вектор я используется в качестве входных данных в процессе индексирования вектора:
i = 1:n;
ref1 = sum(vec(T+i+2:n+T+i+2));
выход следующий:
ref0 =
106000 114000 122000 130000 138000
ref1 =
106000
есть ли способ для достижения этой ref1 дает тот же результат, ref0 с помощью векторизации? Это может быть супер очевидным, но я, кажется, не добираюсь дальше. Я благодарен за любую помощь! Заранее большое спасибо.
Это связано с тем, что оператор двоеточия ':' не принимает векторы в качестве входов и вместо этого использует только первый элемент векторного ввода. – Suever
Векотризация не обязательно означает ускорение. Вы прокомментировали свой код? –
'vec' инициализируется столбцами' T + 2 * n + 1', а затем столбцу '2 * n + T + 2' присваивается значение ... не проблема векторизации, просто может потребоваться исправление? – Wolfie