У меня есть матрица (244 800,4) в виде файла .mat. В каждом слое есть NaN. Как я могу взять среднее значение каждого из этих слоев.
Так что в основном мне нужно одно среднее (всего слоя) на слой.
Спасибо
У меня есть матрица (244 800,4) в виде файла .mat. В каждом слое есть NaN. Как я могу взять среднее значение каждого из этих слоев.
Так что в основном мне нужно одно среднее (всего слоя) на слой.
Спасибо
PAR=mean(PAR(~isnan(PAR(:,:,1))));
Что дает мне правильное среднее значение для первого слоя, однако, когда я хочу переключиться на следующий слой PAR=mean(PAR(~isnan(PAR(:,:,2))));
Это дает мне NaN вместо какого-либо реального значения 20.06.2013 nanmean(nanmean(matrixname))
делает свое дело, я думаю.
Я использую для этого nanmean
, но это часть панели инструментов статистики. Если у вас его нет, вам нужно свернуть свой собственный.
Вы можете разделить свои слои на массив ячеек и удалить значения NAN для каждого. Что-то вроде этого:
Mcells = arrayfun( @(x) M(:,:,x), 1:size(M,3), 'uni', false );
Mmeans = cellfun( @(x) mean(x(~isnan(x(:)))), Mcells );
nanmean
также доступен на MATLAB File Exchange в NaN Suite. Нельзя сказать, что они реализованы одинаково. 20.06.2013 nanmean
, однако я не знаю, как указать его на каждый отдельный слой. Я не думаю, что это может в любом случае. 20.06.2013 nanmean(reshape(M,[],size(M,3)))
20.06.2013 nanmean
работает только в одном измерении, поэтому сначала нужно изменить форму матрицы. 20.06.2013 mean(mean(matrixName))
даст вам матрицу 1x1x4 среднего значения каждого «слоя» в вашей матрице. Однако вы можете сделать что-то, чтобы удалить NaN.
Мы нашли простой путь к проблеме
for ii=1:4
a=reshape(PAR(:,:,ii),1,[]);
b(ii)=nanmean(a);
end
Я использовал команду изменения формы. Спасибо Ханифу Хоссейни из Технологического института Джорджии.
nanmean(reshape(PAR,[],size(PAR,3)))
21.06.2013