Code covered by the BSD License  

Highlights from
Multidimensional matrix multiplication

4.0

4.0 | 1 rating Rate this file 16 Downloads (last 30 days) File Size: 1.75 KB File ID: #41663

Multidimensional matrix multiplication

by

 

06 May 2013 (Updated )

The simple function performs fast matrix multiplication within multidimensional arrays.

| Watch this File

File Information
Description

mmat(A,B) performs matrix multiplication, where the 2D matrices are part of multidimensional arrays. It is equivalent to the Matlab built in mtimes function for 2D arrays. However it naturally extends the mtimes function, where the two input arrays can have arbitrary number of extra dimensions. For example:

A = [1 2;2 1];
B = [3 4; 1 2];

mmat(A,B) == mtimes(A,B)

However A and B can be expanded along the 3rd dimension:

A = repmat([1 2; 2 1],[1 1 5]);

C = mmat(A,B) can be also performed, C will contains:
C(:,:,1) = A(:,:,1)*B;
C(:,:,2) = A(:,:,2)*B; ...

In the above example B was expanded along the singleton dimensions to match the size of A for the multiplication.

In the above examples the matrix multiplication was performed along the first two dimensions of A and B. However when called:
mmat(A,B,dim)
then dim selects two dimensions from A and B along which the matrix multiplication should be performed.

For example:
dim = [1 2] - default value
dim = [2 3] - C(ii,:,:) = A(ii,:,:) * B(ii,:,:);

This function contains only simple Matlab script without for loops!
Thus it is clean, fast and no compiling needed!

Please leave a comment if you like/dislike it, or you found a bug!
Enjoy!

Required Products MATLAB
MATLAB release MATLAB 8.0 (R2012b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (6)
16 Aug 2013 Sandor Toth

Thank you Jorge, indeed when dim not equal to [1 2] line 54/55 can throw an error. I corrected the code!

16 Aug 2013 Jorge Campos

A little improvement:

Replace lines 54 and 55 by

nA = [size(A),ones(1,nD-nDA)]; nA = nA(dim);
nB = [size(B),ones(1,nD-nDB)]; nB = nB(dim);

22 Jul 2013 Sandor Toth

You are right, the whole intermediate matrix is stored in memory during the calculation to increase speed.

Thx

22 Jul 2013 Jorge Campos

Excellent and efficient, however it's not applicable to huge arrays

25 Jun 2013 Sandor Toth

You have to add the path of the file to the Matlab search path:
addpath(pathName)

where pathName is the name of the folder where the mmat function is. After that, you can simply call mmat().

25 Jun 2013 Shauryam

what path has to be given to the function?

Updates
07 May 2013

Corrected a small bug in the code and refreshed the file description.

19 Aug 2013

Line 54/55 are changed, to fix a bug that appears when dim is not the default [1 2] value.

Contact us