Entfernen von vier verschachtelten Schleifen in Matlab
Ich habe die folgenden vier verschachtelten Schleifen in 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
Es gibt drei Vektoren: Einen Eingabevektor, einen zusätzlichen Eingabevektor und einen Ausgabevektor. Alle sind durch Faktoren verbunden. Jeder Vektor hat Werte zu bestimmten Zeitschritten. Ich benötige die Summe aller kombinierten Eingaben, zusätzlichen Eingaben und Faktoren zu jedem gegebenen Zeitpunkt. Später muss ich vom Output zum Input rechnen:
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
In einem dritten Fall muss das Produkt aller drei Vektoren über jeden Zeitschritt summiert werden:
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
Die beiden Code-Schnipsel funktionieren, sind aber unglaublich langsam. Wie kann ich die verschachtelten Schleifen entfernen?
Bearbeiten: Werte hinzugefügt und kleinere Dinge geändert, so dass die Snippets ausführbar sind
Edit2: Anderer Anwendungsfall hinzugefügt