Performance 数组乘法的矢量化
我有一个3d数组U和一个2d矩阵a。我想用下面的方法做乘法。如何将代码矢量化?当然,这个循环太慢了Performance 数组乘法的矢量化,performance,matlab,matrix,vectorization,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 根据矩阵的大小,您可能会发现消除两个循环会占用大量内存,并且只删除列上的循环就足够了 for k = 1:N UU(:,:,k) = A*U(:,:,k); end 将U重塑为2D并执行矩阵乘法,从而使用A的最后一个轴减少U的第一个轴/维度,从而得到一个2D数组。最后,将形状改回3D
for j=1:N
for k=1:N
UU(:,j,k)=A*U(:,j,k);
end
end
根据矩阵的大小,您可能会发现消除两个循环会占用大量内存,并且只删除列上的循环就足够了
for k = 1:N
UU(:,:,k) = A*U(:,:,k);
end
将
U
重塑为2D
并执行矩阵乘法,从而使用A
的最后一个轴减少U
的第一个轴/维度,从而得到一个2D数组。最后,将形状改回3D
以获得最终结果,如下所示-
[m1,n1] = size(A);
[~,m2,n2] = size(U);
out = reshape(A*reshape(U,[n1,m2*n2]),[m1,m2,n2])