Removendo quatro loops aninhados no Matlab
Eu tenho os seguintes quatro loops aninhados no 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
Existem três vetores: um vetor de entrada, um vetor de entrada adicional e um vetor de saída. Todos estão conectados por fatores. Todo vetor tem valores em intervalos de tempo determinados. Preciso da soma de todas as entradas combinadas, entradas e fatores adicionais a cada passo dado. Mais tarde, preciso calcular da saída para a entrada:
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
Em um terceiro caso, preciso do produto de todos os três vetores somados em cada passo de tempo:
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
Os dois trechos de código funcionam, mas são incrivelmente lentos. Como posso remover os loops aninhados?
Editar: valores adicionados e pequenas alterações alteradas para que os trechos sejam executáveis
Edit2: Adicionado outro caso de uso