Я пытался прорисовать определенную взвешенную сумму, но не мог понять, как это сделать. Я создал простой минимальный рабочий пример ниже. Я предполагаю, что решение включает в себя либо продукты bsxfun или reshape, либо kronecker, но мне все еще не удалось заставить его работать.Векторизовать взвешенную сумму 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. Это было быстро. Это прекрасно работает. Я попытался использовать bsxfun и изменить форму, но не понял. Большое спасибо! Я могу принять ответ за 6 минут :) – phdstudent
Я немного изменил вопрос. Легко ли обобщается ответ на трехмерную сумму? – phdstudent
@volcompt Похоже, что это решение хорошо работало для вашего двумерного взвешивающего вопроса, но на самом деле 3D-вопрос - это другой зверь. Лучше всего принять это (если оно работает для вас) и [задать другой вопрос] (http://meta.stackexchange.com/a/43485/318672) с новым вопросом. – Suever