Ich habe versucht, eine bestimmte gewichtete Summe zu vektorisieren, konnte aber nicht herausfinden, wie es geht. Ich habe unten ein einfaches minimales Arbeitsbeispiel erstellt. Ich nehme an, die Lösung beinhaltet entweder bsxfun oder reshape und kronecker Produkte, aber ich habe es immer noch nicht geschafft, es zum Laufen zu bringen.Vectorized gewichtete Summe Matlab
rng(1);
N = 200;
T1 = 5;
T2 = 7;
A = rand(N,T1,T2);
w1 = rand(T1,1);
w2 = rand(T2,1);
B = zeros(N,1);
for i = 1:N
for j1=1:T1
for j2=1:T2
B(i) = B(i) + w1(j1) * w2(j2) * A(i,j1,j2);
end
end
end
A = B;
Wow. Das war schnell. Das funktioniert perfekt. Ich habe versucht, bsxfun zu verwenden und umzuformen, habe es aber nicht herausgefunden. Vielen Dank! Ich kann die Antwort nur in 6 Minuten annehmen :) – phdstudent
Ich habe die Frage etwas bearbeitet. Ist die Antwort leicht verallgemeinerbar für eine dreidimensionale Summe? – phdstudent
@volcompt Es sieht so aus, als ob diese Lösung gut für Ihre 2D-Gewichtungsfrage funktioniert hat, aber die 3D-Frage ist wirklich ein anderes Biest. Am besten akzeptieren Sie dies (wenn es für Sie funktioniert) und [stellen Sie eine andere Frage] (http://meta.stackexchange.com/a/43485/318672) mit Ihrer neuen Frage. – Suever