How do I average columns in cell array if some cells are empty?

13 visualizzazioni (ultimi 30 giorni)
Hi,
I have a cell array called new_mat. I would like to compute the mean of all the values in each column and save the result in a new array called averages. I would then have a numerical array with one row and five columns, so five values in total.
One of my columns however contains an empty cell which I think is causing an error.
I have tried this:
averages = cellfun(@(x) mean(x, 1), new_mat);
But I get this error:
Error using cellfun
Non-scalar in Uniform output, at index 24, output 1.
Set 'UniformOutput' to false.
What am I doing wrong?

Risposte (2)

Arif Hoq
Arif Hoq il 12 Dic 2022
you are asking the same question several times. your cell array "new_mat". giving an answer to your previous question:
a=load("split_newdata_mean.mat");
b=a.split_newdata_mean;
b{1,4}=[b{1,4};NaN]; % making equal dimension in the 4th column
c=[b{:}];
new_mat=c';
averages=mean(new_mat)
averages = 1×5
24.4539 30.7694 29.0602 12.3292 NaN
  1 Commento
Arif Hoq
Arif Hoq il 12 Dic 2022
Modificato: Arif Hoq il 12 Dic 2022
the average of the 5th column is NaN. If you want it as a numerical then add 0 or any value in the 4th column of the cell array.
a=load("split_newdata_mean.mat");
b=a.split_newdata_mean;
b{1,4}=[b{1,4};0]; % making equal dimension in the 4th column
c=[b{:}];
new_mat=c';
averages=mean(new_mat)
averages = 1×5
24.4539 30.7694 29.0602 12.3292 5.0537

Accedi per commentare.


Voss
Voss il 13 Dic 2022
Modificato: Voss il 13 Dic 2022
load new_mat
new_mat % notice the cell in the 4th row, 5th column contains an empty array
new_mat = 5×5 cell array
{[ 2.9473]} {[ 0.7736]} {[24.7335]} {[-32.1028]} {[ 5.4609]} {[ 7.9357]} {[15.6115]} {[28.3915]} {[ 51.8624]} {[ 1]} {[38.3376]} {[62.5463]} {[35.4955]} {[ 17.6059]} {[ 35.9168]} {[15.0732]} {[24.9668]} {[ 3.2505]} {[-21.6557]} {0×0 double} {[57.9756]} {[49.9486]} {[53.4301]} {[ 45.9361]} {[-17.1092]}
n_col = size(new_mat,2);
averages = zeros(1,n_col);
for ii = 1:n_col
averages(ii) = mean([new_mat{:,ii}]);
end
disp(averages);
24.4539 30.7694 29.0602 12.3292 6.3171

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by