how to find mean with nan
4 次查看(过去 30 天)
显示 更早的评论
Hi!
I want to find mean with nan values and with different step. My script is:
RowDivision=[1,46,172,305,472,618,714,784,920];
nElement=diff(RowDivision); % step
meanG=cellfun(@mean,(mat2cell(G,nElement,ones(size(G,2),1)))); %mean
but if i have one only nan value i.e. from 1 to 46 the mean is nan. How can I ignore the nan? Thank you!
0 个评论
采纳的回答
Azzi Abdelmalek
2014-10-10
编辑:Azzi Abdelmalek
2014-10-10
a=[1 2 nan 3 nan 10]
nanmean(a)
%or
mean(a(~isnan(a)))
0 个评论
更多回答(2 个)
Andrew Reibold
2014-10-10
编辑:Andrew Reibold
2014-10-10
Use nanmean
If you dont have it, I wrote this
For an array, x
n_nans = 0;
temp = x;
for i = 1:length(x)
if isnan(x(i))
temp(i) = 0;
n_nans = n_nans+1;
end
end
mean = sum(temp)/(length(temp)-n_nans)
Image Analyst
2014-10-10
If you have the Stats toolbox, use nanmeans. If you don't, you can do it in two lines of code, one to find the nans and one to get the mean:
% Create sample data
RowDivision=[1,46,172,305,472,618,714,784,920];
% Make some nans
RowDivision(2) = nan;
RowDivision(4) = nan
% Find the nans
nanElements = isnan(RowDivision)
% Compute the mean with no nans being considered.
meanNoNans = mean(RowDivision(~nanElements))
Actually you can do that in one line of code if you want.
1 个评论
Image Analyst
2014-10-10
Oops - just like Azzi's edit which he posted while I was composing my response.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!