行列 A mxn の各サブブロックに行列 B pxq を乗算したいと思います。たとえば、A はそれぞれ mxp のサイズの k サブブロックに分割できます。
A = [A_1 A_2 ... A_k]
結果の行列は C = [A_1*B A_2*B ... A_k*B] になり、効率的に実行したいと思います。
私が今まで試したことは次のとおりです。
C = A*kron(eye(k),B)
編集: ダニエル 私はあなたが正しいと思います. 私は3つの異なる方法を試しました。クロネッカー積を計算するのは悪い考えのようです。reshape を使用したソリューションでさえ、よりコンパクトな kron ソリューションよりも高速に動作します。
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