MATLAB Answers

How can i vectorize a matrix multiplication of higher dimension arrays?

23 views (last 30 days)
Anthony Barone
Anthony Barone on 1 Apr 2016
Answered: Steven Lord on 17 Sep 2020
I want to multiply a 6x6 matrix A and a 6x1 vector B at every grid point in a 3D earth model. Currently I am doing this:
for ix=1:length(x)
for iy=1:length(y)
for iz=1:length(z)
C(:,ix,iy,iz)=squeeze(A(:,:,ix,iy,iz))*squeeze(B(:,ix,iy,iz));
end
end
end
Is there a way to vectorize this? Currently this segment of nested loops is by far the slowest part of my code (almost 90% of the time taken every iteration is spent in this nested loop). Thanks!

  1 Comment

Anthony Barone
Anthony Barone on 1 Apr 2016
I have found an answer, but I still wanted to post it incase anyone else has a similiar situation. I did this:
for n=1:6
C(n,:,:,:)=sum(squeeze(A(n,:,:,:,:)).*B);
end
For me, this method proved to be ~30x faster than my initial method.

Sign in to comment.

Answers (2)

Steven Lord
Steven Lord on 17 Sep 2020
If you're using release R2020b or later, take a look at the pagemtimes function introduced in that release.

  0 Comments

Sign in to comment.


Matt J
Matt J on 1 Apr 2016
Using mtimesx ( Download )
C=mtimesx( reshape(A,6,6,[]) , reshape(B,6,1,[]) );
C=reshape(C,size(B));

  0 Comments

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by