MATLAB Answers

How to compute the mean of several matrices in a cell?

29 views (last 30 days)
Kim Arnold
Kim Arnold on 30 Sep 2020 at 12:13
Commented: Kim Arnold on 30 Sep 2020 at 12:42
I have 15 matrices (size of each matrix 17x5000) in a type of cell named M_one and size 1x15 {1,15] (matrix 1 would be M_onel{1,1}, matrix 2 would be in M_one{1,2} and so on. I want to sum together always 3 matrices and then calculate the mean of those three matrices. This would look like:
M_onel{1,1}+M_one{1,2} + M_one{1,3}./3 % sum first three matrices and calculate mean by dividing with 3
M_onel{1,4}+M_one{1,5} + M_one{1,6}./3 % same for matrices 4,5 and 6
M_onel{1,7}+M_one{1,8} + M_one{1,9}./3 % same for matrices 7,8 and 9
... % same for matrices 10,11,12 and 13,14, 15
Is there an easier way to do it, for example in a loop? Since I want it to do always for 3 matrices its not easy to do it with a loop.
Thanks already in advance for your help!


Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 30 Sep 2020 at 12:21
Edited: Stephen Cobeldick on 30 Sep 2020 at 12:28
Just for fun, if your memory can handle it:
A = mean(permute(cell2mat(reshape(M_one,1,1,3,[])),[1,2,4,3]),4)
For matrices of that size, a loop will be most efficient, e.g.:
M_one = arrayfun(@(n)randi(17,5000),1:15,'uni',0); % fake data
C = reshape(M_one,3,[]);
N = size(C,2);
D = cell(1,N); % preallocate
for k = 1:N
D{k} = mean(cat(3,C{:,k}),3);

  1 Comment

Kim Arnold
Kim Arnold on 30 Sep 2020 at 12:41
Thanks a lot for this nice answer. I prefer the second option, I think my memory was a bit exhausted :)

Sign in to comment.

More Answers (1)

Ameer Hamza
Ameer Hamza on 30 Sep 2020 at 12:32
An alternative approach. M_one is your 1x15 cell array
M_one = mat2cell(M_one, 1, 3*ones(1, numel(M_one)/3));
M_avg = cellfun(@(x) {mean(cat(3, x{:}), 3)}, M_one);

  1 Comment

Kim Arnold
Kim Arnold on 30 Sep 2020 at 12:42
Many thanks for your answer! Really smart!

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