【发布时间】:2015-10-08 10:26:45
【问题描述】:
假设我有:
A = rand(1,10,3);
B = rand(10,16);
我想得到:
C(:,1) = A(:,:,1)*B;
C(:,2) = A(:,:,2)*B;
C(:,3) = A(:,:,3)*B;
我能否以某种方式将其乘以一行以使其更快?
如果我像这样创建新的张量 b 会怎样
for i = 1:3
b(:,:,i) = B;
end
我可以将 A 和 b 相乘得到相同的 C 但更快吗?上面的循环创建 b 所花费的时间并不重要,因为我需要 C 来处理许多不同的 A-s 而 B 保持不变。
【问题讨论】:
-
如果
A = rand(4,10,3)是一个没有单一维度的3D数组怎么办?那么输出必须是什么? -
@Divakar 我的问题总是单例。
-
在这种情况下,只需
squeezeA并使用矩阵乘法 -C = B.'*squeeze(A)。 -
@Divakar 这就是 LuisMendo 的回答,它确实加快了程序的运行速度,无论如何谢谢!
标签: performance matlab multidimensional-array vectorization multiplication