# how to calculate mean of cell arrays within cell array

17 views (last 30 days)
Farshid Daryabor on 3 Mar 2020
Edited: Mario Malic on 3 Mar 2020
Dear,
I have "T_mon" which is 1X12 cell array (January to December). Each column includes another cell array (1x13), (1x12),...(1x11). For every column in 1X12 cell array, I want to get mean of T_mon{1, 1}, T_mon{1, 2} ... up to T_mon{1, 12}, to be a double within a cell 1x12. How can I do this?
This cell within the cell is coming from this piece of for loop I wrote. It might not be very clever way of doing this.
for i = 1 : 12
A = T_mon{i};
T_mean{i} = cellfun(@(x) nanmean(x,2), A,'UniformOutput',false);
end

#### 1 Comment

Rik on 3 Mar 2020
So what data do you want to get the mean from? Can you show a small example? Do you want to calculate the mean of all values in T_mon{1}?

Mario Malic on 3 Mar 2020
You will need to have two loops, looping over i and j.
for i = 1:length(T_mon)
for j = 1:length(T_mon{1,i})
M(i,j) = mean(T_mon{1,i}{1,j});
end
end
I noticed that there are cells that have different sizes, so I included that with length.

Farshid Daryabor on 3 Mar 2020
Dear Mario,
T_mon= {cell_1,cell_2,...,cell_12};
and for instance,
cell_1 = {double_1,double_2,double_3};
I want to get mean of three double arrays mean(cell_1), i.e., ((double_1+double_2+double_3)./3) to be one double(n*1) and so for others, cell_2,cell_3,...cell_12
eventually I would to have a Matrix double M*12, which 'M' is size of elements of (mean(cell_1), mean(cell_2),...mean(cell_12))
Farshid Daryabor on 3 Mar 2020
It is what I expacted
for jj = 1 : length(T_mon)
A = T_mon{jj};
N = cellfun(@numel, A);
M = max(N);
A_new = cell2mat(cellfun(@(x) [x; nan(M - numel(x),1)],A,'uni',0));
B = nanmean(A_new,2);
C{jj}=B;
end
Mario Malic on 3 Mar 2020
for i = 1:length(T_mon)
for j = 1:length(T_mon{1,i})
M(i,j) = sum(T_mon{1,i}{1,j});
end
end
A = nanmean(M,2); % mean value of rows
A = A'
I hope I understood well what you wanted.
Edit: didn't know that 'nanmean' existed.