0

行列 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
4

1 に答える 1