Pagewise multiplication along a dimension without using a for loop?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Hello, is there a way code pagewise multiplication along a single dimension of a matrix without using a for loop?
In the example below, I have a single 4D matrix where I use pagewise multiplication along its 4th dimension in a for loop to achieve a 3D matrix.
Is there a way to remove the for loop from this?
X = randi([1 10],2,2,10,5);
Y = pagemtimes(X(:,:,:,1),X(:,:,:,2));
for i = 3:length(X(1,1,1,:))
Y = pagemtimes(Y,X(:,:,:,i));
end
0 Commenti
Risposte (2)
Matt J
il 10 Mar 2025
Modificato: Matt J
il 10 Mar 2025
No, but looking at your code, I would guess that the speed is being encumbered much more by the operation length(X(1,1,1,:)) than by anything else. You should instead do,
for i = 3:size(X,4)
Y = pagemtimes(Y,X(:,:,:,i));
end
You would need an incredibly large size(X,4) relative to the other dimensions for the for-loop itself to be a significant bottleneck. If that's the case though, you might be able to benefit from a parfor loop, as demonstrated below,
X = randi([1 10],2,2,10,1e6);
Y = pagemtimes(X(:,:,:,1),X(:,:,:,2));
tic;
parfor i = 3:size(X,4)
Y = pagemtimes(Y,X(:,:,:,i));
end
toc
Elapsed time is 0.784269 seconds.
tic;
for i = 3:size(X,4)
Y = pagemtimes(Y,X(:,:,:,i));
end
toc
Elapsed time is 2.254356 seconds.
4 Commenti
Matt J
il 16 Mar 2025
The Optimization Toolbox solvers let yoy parallelize central difference computations in their iterative loops. That might be somethign to consider.
Matt J
il 13 Mar 2025
Modificato: Matt J
il 13 Mar 2025
If you can build X in cell array form, instead of 4D form, you can save some time as well:
X = randi([1 10],2,2,10,5);
Xc = num2cell( X , 1:3 );
timeit(@()version1(X))*1e6
timeit(@()version2(Xc))*1e6
function version1(X)
Y = pagemtimes(X(:,:,:,1),X(:,:,:,2));
for i = 3:size(X,4)
Y = pagemtimes(Y,X(:,:,:,i));
end
end
function version2(Xc)
Y = pagemtimes(Xc{1},Xc{2});
for i = 3:numel(Xc)
Y = pagemtimes(Y,Xc{i});
end
end
0 Commenti
Vedere anche
Categorie
Scopri di più su Arithmetic Operations in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!