我有一个3d数组U和一个2d矩阵A.我想按照以下方式进行乘法运算。如何对代码进行矢量化?当然,循环太慢了。
for j=1:N
for k=1:N
UU(:,j,k)=A*U(:,j,k);
end
end
答案 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