本文主要是介绍matlab 含有nan值的 求和 平均 nansum nanmean isnan,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前几天编程,想算一个矩阵在含有nan值情况下的sum mean 等
这个功能一直没找到,于是自己编了小函数
最后呢,忽然发现在stats toolbox中居然有这种函数
nansum nanmean 等等
说起来,就两招
1、isnan
2、逻辑数组的加减法--这一条真让人吐血,之前完全不知道逻辑型可以计数的
我编了一堆的话,而事实上人家用了这样几行就可以搞定
nans = isnan(x);
x(nans) = 0;
n = sum(~nans); % 把这个0啊1啊的数列求和...就得到非零的个数,可这个nans分明是个逻辑数组
sum(x)./n;
stats toolbox里已经有了这些函数,
可以用 edit nanmean这个命令查看
下面这个是我编的
function M = mean_with_nan(A,dim)
% MEAN_WITH_NAN: Mean value, ignoring NaNs.
% USAGE:
% M = mean_with_nan(A)
% M = mean_with_nan(A,dim)
% input:
% A - vector or multiple-dim arrays (with nan)
% dim - take mean value along dim
% output:
% M - mean value
% for nargin =1
% M is a number, even if input is arrays, this function treats it as a vector
%
% for nargin = 2
% input multiple-dim array, similar as the function MEAN
% M is the mean value along the dim
%
% Last edited 2011-2-1
li = isnan(A);
if nargin == 1
M = mean(A(~li));
elseif nargin == 2
A(li) = 0;
n = sum(~li,dim);
n(n==0) = NaN;
M = sum(A,dim)./n;
end
end
这篇关于matlab 含有nan值的 求和 平均 nansum nanmean isnan的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!