Есть детали, которые я предположил, но этот шутл сделает свое дело:
A=reshape(1:16,4,4).';
b=repelem([2,0,1,3],1,4).';
c=[];
for row=1:size(A,1)
c=[ c; sum(reshape(repelem(A(row,:),4).*b.',4,[]),2)];
end
Я предполагаю, что ваша демонстрация для вектора - просто плохой пример, и вы не будете иметь повторяющиеся значения, в противном случаеболее легкую версию можно получить, просто не выполняя 3/4 умножения.
Если у вас нет доступа к repelem
, взгляните на альтернативные коды, которые делают то же самое: Элементная репликация массива в Matlab