arraysmatlabmatrixcellmean

How can I make the mean of 3d matrices in a cell in Matlab?


I have a 1x12 cell in Matlab and each element of this cell has a 3d matrix. I want to make the mean of these 3d matrices, so that I obtain a 3d matrix that has the same dimensions of each one of the 3d matrices of the cell and that is the mean of the 12 3d matrices. How can I do this operation ?

I tried to extract each cell and create a 4d matrix so that I could do mean(fourdmatrix,4) . However, it seems not possible to create a 4d matrix.

Ideed, a code like this:

cell={threedmatrixA, threedmatrixB, ...}
fourdmatrix=[];

for i=1:12
 fourdmatrix(i)=cell{i};
end

does not work. How can I do it ?


Solution

  • One you have the data in a 4d array it's simple enough, just use mean and supply the dimension to work over as you suggest. As @Cris notes you might run out of memory forming the 4d array (since it will copy all the data) in which case you'll want to loop over the existing arrays. But if you have enough memory this should work:

    % make 12 random 3d arrays in cell array `c`
    for i=1:12
        c{i} = rand(10, 10, 10); 
    end
    
    % Make a 4d array:
    array4d = cat(4, c{:}); % Same as writing cat(4, c{1}, c{2}, c{3}, etc)
    
    m = mean(array4d, 4);  % Take the mean along the 4th dimension
    size(m)  % Show the size of the output (here should be 10,10,10)