Cellfun for mean squared error

조회 수: 4 (최근 30일)
Phoebe Daphne
Phoebe Daphne 2021년 5월 23일
댓글: Phoebe Daphne 2021년 5월 23일
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
Matt J
Matt J 2021년 5월 23일
cellfun will not make the code run faster. It will just reduce the number of lines of code.
Phoebe Daphne
Phoebe Daphne 2021년 5월 23일
I want to reduce my lines of code.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2021년 5월 23일
편집: Matt J 2021년 5월 23일
Seems like you could do the whole thing in one line with,
data_avg = immse( cell2mat(data(:,1)) , cell2mat(data(:,2)) );

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by