517 views (last 30 days)

Hi,

I have two 3D matrices that I need to multiply in a specific way. I need to do for k=1:Z M(:,:,k)=A(:,:,k)*B(:,:,k) end

but I do not want to use for loop because it makes my code run slower and I need to this multiplication for a unsteady flow profile calculation (close to million time steps). Is there a more efficient way to do it?

James Tursa
on 24 Jun 2011

M = mtimesx(A,B);

You can find MTIMESX here:

James Tursa
on 24 Jun 2011

Sign in to comment.

Walter Roberson
on 24 Jun 2011

There is no built-in MATLAB support for 3D multiplications. The program James refers to is probably a good choice.

By the way, especially in the releases of the last few years, "for" loops are sometimes faster than vectorization, especially for large matricies.

Sign in to comment.

Kamuran
on 24 Jun 2011

Walter Roberson
on 24 Jun 2011

Appropriate C compilers depend upon your OS and MATLAB release. You can start at the following, but be sure to look for information about your particular release, as the list of supported compilers is different between releases. Also note that 64 bit Windows has different compilers than 32 bit Windows.

http://www.mathworks.com/support/compilers/R2011a/win32.html

James Tursa
on 24 Jun 2011

Type the following at the MATLAB prompt:

mex -setup

Then press Enter and see what shows up. If you have a 32-bit system then hopefully a compiler will already be there. If you have a 64-bit system then you will have to install one yourself unfortunately.

Walter Roberson
on 24 Jun 2011

I checked back... we do not have any information about the OS or MATLAB version the poster is using.

Sign in to comment.

Mr M.
on 6 Apr 2018

I got the following error message:

Error using mtimesx_build (line 120) Unable to compile mtimesx.c

Error in mtimesx (line 271) mtimesx_build;

James Tursa
on 6 Apr 2018

MTIMESX is way overdue for an update (TMW changed mex procedures some time ago). In the meantime, try this or some variation of this modified for your system:

lib_blas = fullfile(matlabroot,'extern','lib',computer('arch'),'microsoft','libmwblas.lib');

mex('mtimesx.c',lib_blas,'-largeArrayDims')

Sign in to comment.

Daniel Frisch
on 3 Feb 2020

Matrix multiplication can also be expressed using native Matlab code (times and sum):

% A : (a x c x Z)

% B : (c x b x Z)

Ap = permute(A,[2,1,4,3]); % (c x a x 1 x Z)

Bp = permute(B,[1,4,2,3]); % (c x 1 x b x Z)

M = Ap .* Bp; % (c x a x b x Z)

M = sum(M,1); % (1 x a x b x Z)

M = permute(M,[2,3,4,1]); % (a x b x Z)

James Tursa
on 10 Feb 2020

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/10161-3d-matrix-multiplication#comment_554004

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/10161-3d-matrix-multiplication#comment_554004

## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/10161-3d-matrix-multiplication#comment_554007

⋮## Direct link to this comment

https://la.mathworks.com/matlabcentral/answers/10161-3d-matrix-multiplication#comment_554007

Sign in to comment.