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.Dreifach gewichtete Summe
rng(1);
N = 200;
T1 = 5;
T2 = 7;
T3 = 10;
A = rand(N,T1,T2,T3);
w1 = rand(T1,1);
w2 = rand(T2,1);
w3 = rand(T3,1);
B = zeros(N,1);
for i = 1:N
for j1=1:T1
for j2=1:T2
for j3=1:T3
B(i) = B(i) + w1(j1) * w2(j2) * w3(j3) * A(i,j1,j2,j3);
end
end
end
end
A = B;
Für den zweidimensionalen Fall gibt es eine intelligente Antwort here.
brauchen Sie zu verallgemeinern? Wenn ja, würde ich Ihr N, T1, T2, T3 als Array umformulieren. –
Ich wollte eigentlich nur den dreidimensionalen Fall. Aber die Verallgemeinerung könnte für jemand anderen nützlich sein :) – phdstudent
Generalisierung unten :) –