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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage