element-wise multiplication of lateral slices of a 3-D array with rows of a 2-D array in the 3rd dimension
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Aditya Srikar
le 28 Fév 2023
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.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!