用于数组乘法的矢量化

时间:2016-04-03 05:10:58

标签: performance matlab matrix vectorization

我有一个3d数组U和一个2d矩阵A.我想按照以下方式进行乘法运算。如何对代码进行矢量化?当然,循环太慢了。

for j=1:N
 for k=1:N
 UU(:,j,k)=A*U(:,j,k);
 end
end

2 个答案:

答案 0 :(得分:2)

U重塑为2D并执行矩阵乘法,从而减少U的第一轴/维度A的最后一个轴,为我们提供2D阵列。最后,重新调整为3D以获得最终结果,如此 -

[m1,n1] = size(A);
[~,m2,n2] = size(U);
out = reshape(A*reshape(U,[n1,m2*n2]),[m1,m2,n2])

答案 1 :(得分:0)

根据矩阵的大小,您可能会发现消除两个循环会占用大量内存,而只删除列上的循环就足够了,

for k = 1:N
   UU(:,:,k) = A*U(:,:,k);
end