我想将矩阵 A mxn 的每个子块与矩阵 B pxq 相乘。例如,A 可以分为 k 个子块,每个子块的大小为 mxp。
A = [A_1 A_2 ... A_k]
结果矩阵将是 C = [A_1*B A_2*B ... A_k*B] 我想有效地做到这一点。
到目前为止,我尝试过的是:
C = A*kron(眼睛(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