我需要将矩阵A
与n个矩阵相乘,并得到n
个矩阵作为结果。例如,将一个2x2的矩阵与3个2x2的矩阵堆叠成一个2x2x3的Matlab数组进行乘法运算。bsxfun
通常用于这种情况,但它只适用于逐元素操作。
我可以采用以下方式:
blkdiag(a, a, a) * blkdiag(b(:,:,1), b(:,:,2), b(:,:,3))
但我需要一个针对任意的n
的解决方案 - ?
我需要将矩阵A
与n个矩阵相乘,并得到n
个矩阵作为结果。例如,将一个2x2的矩阵与3个2x2的矩阵堆叠成一个2x2x3的Matlab数组进行乘法运算。bsxfun
通常用于这种情况,但它只适用于逐元素操作。
我可以采用以下方式:
blkdiag(a, a, a) * blkdiag(b(:,:,1), b(:,:,2), b(:,:,3))
但我需要一个针对任意的n
的解决方案 - ?
您可以重新塑形
堆叠的矩阵。假设您有一个k
×k
矩阵a
和一堆m
个k
×k
矩阵sb
,您希望对于ii = 1..m
,得到乘积a*sb(:,:,ii)
。那么您所需要的就是:
sza = size(a);
b = reshape( b, sza(2), [] ); % concatenate all matrices aloong the second dim
res = a * b;
res = reshape( res, sza(1), [], size(sb,3) ); % stack back to 3d
b
之前,你需要存储size(sb,3)
,以便在最后使用它。 - Luis Mendosb
代表“堆叠”版本,而b
则代表调整大小后的版本。 - Shaib
。 - Luis Mendob = reshape( sb, sza(2), [] );
。 - user1618022sb(:,:,ii)*a
怎么办? - user1618022对于需要执行矩阵乘法的大型矩阵和/或向量堆栈,速度可能成为一个问题。为了避免重复造轮子,您可以编译并使用以下快速MEX代码:MTIMESX - Mathworks。作为经验法则,MATLAB在执行看起来应该可向量化的大量操作的for循环时通常效率较低;我无法想到一种简单的方法将Shai的答案推广到这种情况。
times
,也许可以在这里替换为mtimes
。 - Dennis Jaheruddin