Cellfun for mean squared error

1 visualizzazione (ultimi 30 giorni)
Phoebe Daphne
Phoebe Daphne il 23 Mag 2021
Commentato: Phoebe Daphne il 23 Mag 2021
I have a 450x2 cell data structure called data, with each cell containing 10000 x 1 Doubles.
I want to calculate the mean squared error (via the immse function) between for each row in the cell, i.e. immse(data{i,1},data{i,2}) with i indicating one of the 450 rows. Then I want to add the calculated mean squared error to a variable called data_sum (My overall goal is to calculate the average mean squared error).
So far, I am solving this by looping over data:
data_sum = 0;
for p = 1:size(data,1)
data_sum = data_sum + immse(data{p,1},data{p,2});
end
data_avg = data_sum / size(data,1);
I want to optimize my code and use cellfun instead. So far I have tried the following:
C = cellfun(@immse, data{:,1}, data{:,2}, 'UniformOutput', false);
However, this gives me the error:
Error using cellfun
Input #2 expected to be a cell array, was double instead.
I read online that I should convert double to cell to solve this problem. Since I am using cellfun because, well, I am applying it to a cell, it makes me assume that I am indexing data in a wrong way, because otherwise I wouldn't have to convert it to a cell first. Or should I be using a different function than cellfun?
  2 Commenti
Matt J
Matt J il 23 Mag 2021
cellfun will not make the code run faster. It will just reduce the number of lines of code.
Phoebe Daphne
Phoebe Daphne il 23 Mag 2021
I want to reduce my lines of code.

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 23 Mag 2021
Modificato: Matt J il 23 Mag 2021
Seems like you could do the whole thing in one line with,
data_avg = immse( cell2mat(data(:,1)) , cell2mat(data(:,2)) );

Più risposte (0)

Categorie

Scopri di più su Data Type Conversion 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