我有两个矩阵A
和B
,分别为维度[a b c]
和[b a c]
。我想做以下事情:
C = zeros([a a c]);
for i = 1 : c
C(:,:,i) = A(:,:,i) * B(:,:,i);
end
没有使用任何for
循环。换句话说,通过一些内置函数,或者某种矢量操作。
这可能吗?
答案 0 :(得分:2)
我认为你的计算应该已经相当快了。但是,您可以在文件交换中尝试{em> James Tursa 的mtimesx
submission,其描述如下:
MTIMESX是一种快速通用矩阵和标量乘法程序,具有以下特征:
- 直接支持多维(nD,n> 2)数组
- [...]
- 在大多数情况下可以达到或超过MATLAB的速度
如果您正在处理大量小尺寸的矩阵,您可能会发现矢量化不同的尺寸也可以加快速度:
C = zeros(a,a,c);
for j = 1:size(A,2)
C = C + bsxfun(@times, A(:,j,:), B(j,:,:));
end