Effacer les filtres
Effacer les filtres

Vectorizing/speeding up bsxfun multiplication-loop

3 vues (au cours des 30 derniers jours)
PetterS
PetterS le 12 Avr 2015
Commenté : PetterS le 12 Avr 2015
I have a situation that looks like this:
C=zeros(1440,181,8);
for i=1:8
C(:,:,i)=sum(bsxfun(@times,A(:,:,31:end),reshape(B(:,i),1,1,[])),3);
end
Where A is of size=1440x181x2251 and B size=2221x8.
What I want to do is simply perform an element wise multiplication between A(:,:,31:end) and all the rows of the i’th column in B and then store the summation of the third dimension of this in C depending on the address of i. This seemingly simple command is destroying the runtime of my script and I can’t really figure out how to speed it up by avoiding the for loop. I tried replacing the for loop by a parfor to do several loops at the same time but I immediately run out of memory when I try that so it doesn’t work.
Any suggestions?
Thanks

Réponse acceptée

Roger Stafford
Roger Stafford le 12 Avr 2015
Modifié(e) : Roger Stafford le 12 Avr 2015
You can try these to see which, if either, is faster than your current method:
C = reshape(reshape(A(:,:,31:end),[],2221)*B,1440,181,8);
or
C = reshape(reshape(A(1440*181*30+1:end),[],2221)*B,1440,181,8);
They should both give the same result as your code. The idea here is to convert to two-dimensional matrix multiplication and then reshape the result back to a three dimensional array, with the hope that Mathworks' matrix multiplication is more efficient than the combined action of 'sum' and 'bsxfun'.
  1 commentaire
PetterS
PetterS le 12 Avr 2015
The first suggestion works like a dream! Thank you so much.
(the second one was also faster than my version but it caused a huge memory usage spike of about 10 Gb to run which I can’t afford)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Parallel Computing 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!

Translated by