Pagewise multiplication along a dimension without using a for loop?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (2)
Matt J
le 10 Mar 2025
Modifié(e) : Matt J
le 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 commentaires
Matt J
le 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
le 13 Mar 2025
Modifié(e) : Matt J
le 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 commentaires
Voir également
Catégories
En savoir plus sur Arithmetic Operations dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!