Remove NAN from cell array, and calculate the average of each column through each cell
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a 1 x 17 cell array called M, with each cell containing a 16 x 27 Matrix. I need to get rid of NaN in each cell. I tried this code:
for i=1:length(M) ind = isnan(M{1}); M{i}(ind)=[]; end
But the cells are reshaped to rows (1x240) and I need the expected result to be a p*q Matrix. Once the expected result is obtained, I have to go through each cell and calculate the average of each column q Any help please?
댓글 수: 2
Punit
2015년 4월 22일
First of all
ind = isnan(M{1});
should be ind = isnan(M{i});
Also, try replacing M{i}(ind) = 0;
then sum(M(:,q))/length(find(~ind(:,q))) would be the average of column q
채택된 답변
Guillaume
2015년 4월 22일
As of version 2015a, mean can ignore NaNs (in earlier version you had to use nanmean in the stat toolbox).
So the simplest way to calculate the mean is with:
colmeans = cellfun(@(m) mean(m, 'omitnan'), M, 'UniformOutput', false);
celldisp(colmeans);
Even simpler, would be to just store all your matrices as a 3D matrix (of size 16 x 27 x 17) and avoid cell arrays entirely:
M = cat(3, M{:});
colmeans = mean(M, 'omitnan')
댓글 수: 3
Guillaume
2015년 4월 22일
A simpler version of your code would be:
T = cat(3, M{:});
colmeans = mean(T(4:9, 2:22));
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!