Удаление четырех вложенных циклов в Matlab
У меня есть следующие четыре вложенных цикла в Matlab:
timesteps = 5;
inputsize = 10;
additionalinputsize = 3;
outputsize = 7;
input = randn(timesteps, inputsize);
additionalinput = randn(timesteps, additionalinputsize);
factor = randn(inputsize, additionalinputsize, outputsize);
output = zeros(timesteps,outputsize);
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
output(t,o) = output(t,o) + factor(i,a,o) * input(t,i) * additionalinput(t,a);
end
end
end
end
Существует три вектора: один входной вектор, один дополнительный входной вектор и выходной вектор. Все они связаны факторами. Каждый вектор имеет значения на заданных временных шагах. Мне нужна сумма всех объединенных входов, дополнительных входов и факторов на каждом заданном временном шаге. Позже мне нужно рассчитать от вывода до ввода:
result2 = zeros(timesteps,inputsize);
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
result2(t,i) = result2(t,i) + factor(i,a,o) * output(t,o) * additionalinput(t,a);
end
end
end
end
В третьем случае мне нужно, чтобы произведение всех трех векторов суммировалось по каждому временному шагу:
product = zeros(inputsize,additionalinputsize,outputsize)
for t=1:timesteps
for i=1:inputsize
for o=1:outputsize
for a=1:additionalinputsize
product(i,a,o) = product(i,a,o) + input(t,i) * output(t,o) * additionalinput(t,a);
end
end
end
end
Два фрагмента кода работают, но невероятно медленные. Как я могу удалить вложенные циклы?
Редактировать: Добавлены значения и изменены второстепенные вещи, чтобы фрагменты были исполняемыми
Edit2: добавлен другой вариант использования