element-wise multiplication of lateral slices of a 3-D array with rows of a 2-D array in the 3rd dimension
1 次查看(过去 30 天)
显示 更早的评论
I am trying to find a compact way of multiplying lateral slices of a 3D array with rows of a 2D array where the mulitiplication is performed element-wise along the 3rd dimension (I think this is a correct description). I have vectorised the expressions as far as I can in several steps, but there are two residual loops that seem irreducible. I am curious if there is a way of further vectorizing this procedure to completely remove the for loops involving array columns, jj
% define some scalar constants
lam_y = 2.8749e-5; ep = 1.8e-3; Rf = 1; Dp = 3.6817e-4; G = 4.1964e-3; F = 5e4; tw = 1e2;
% define vectors corresponding to dimensions of final 3-D array
nx = 10; nz = 20; nt = 30; % assume an arbitrarily small grid for debugging purposes
xx = linspace(0,1,nx)'; zz = linspace(0,1,nz)'; t = linspace(0,1e5,nt)';
% calculate 2-D array del_t(nt,nx)
del_t = t - Rf*tw*xx';
del_t(del_t < 0) = 0;
% calculate 2-D arrays Fparmx(nz,nx) and arg1(nz,nx)
Fparmx = G*(F*xx' + zz./(ep*Dp));
arg1 = sqrt(lam_y)*Fparmx;
% calculate 3-D array arg2(nt,nx,nz) formed by multiplication of columns
% of del_t array with rows of Fparmx' array
for jj = 1:nx
arg2(:,jj,:) = 1./(2*sqrt(del_t(:,jj)))*[Fparmx(:,jj)]';
end
% calculate 3-D arrays arg3, E1 & E2
arg3 = repmat(sqrt(lam_y*del_t),[1 1 nz]); % arg3(nt,nx,nz)
E1 = erfc(arg2 - arg3); % E1(nt,nx,nz)
E2 = erfc(arg2 + arg3); % E2(nt,nx,nz)
% calculate 3-D array cp(nt,nx,nz) by multiplying lateral slices of E1 & E2 with
% tubes of reshaped array exp(±arg1) element-wise in the 3rd dimension
for jj = 1:nx
cp(:,jj,:) = 0.5*exp(-lam_y*Rf*tw*xx(jj))*...
(E1(:,jj,:).*reshape(exp(-arg1(:,jj)),1,1,[]) + ...
E2(:,jj,:).*reshape(exp(arg1(:,jj)),1,1,[]));
end
0 个评论
采纳的回答
Aditya Srikar
2023-2-28
Hi James
I see that you want to reduce the number of statements and further optimize the code. But the code you have written is already optimised and further optimisation may not be required/possible.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!