Я хотел бы умножить каждый подблок матрицы A mxn на матрицу B pxq. Например, A можно разделить на k субблоков, каждый размером mxp.
A = [A_1 A_2 ... A_k]
В результате матрица будет C = [A_1 * B A_2 * B ... A_k * B], и я хотел бы сделать это эффективно.
До сих пор я пробовал:
С = А * крон (глаз (к), В)
Отредактировано: Даниэль, я думаю, вы правы. Я пробовал 3 разных способа. Вычисление продукта кронекера кажется плохой идеей. Даже решение с изменением формы работает быстрее, чем более компактное решение в кронах.
tic
for i=1:k
C1(:,(i-1)*q+1:i*q) = A(:,(i-1)*p+1:i*p)*B;
end
toc
tic
C2 = A*kron(eye(k),B);
toc
tic
A = reshape(permute(reshape(A,m,p,[]),[1 3 2]),m*k,[]);
C3 = A*B;
C3 = reshape(permute(reshape(C3,m,k,[]),[1 3 2]),m,[]);
toc