原文地址:[转]matlab 含有nan值的 求和 平均 nans m nanmean   .comvera__weiitemaab05334dc0f37f962 = 其实木啥好看的.其实就一句话,当矩阵还nan时,把求和,求平均,求标准差的函数换成: nans m,nanmean,nanstd 就行了~~~ 刚刚准备编一个fortran程序算我的标准差的,借来师姐的m文件一看,原来matlab这么可爱,连有缺省值的都能一个命令搞定,顿时让我对matlab的好感倍增,我决定要好好学习matlab了 +=+ 前几天编程,想算一个矩阵在含有nan值情况下的s m mean 等 这个功能一直没找到,于是自己编了小函数 最后呢,忽然发现在stats toolbox中居然有这种函数 nans m nanmean 等等 说起来,就两招 1,isnan 2,逻辑数组的加减法--这一条真让人吐血,之前完全不知道逻辑型可以计数的 我编了一堆的话,而事实上人家用了这样几行就可以搞定 nans = isnan(x); x(nans) = 0; n = s m(~nans); % 把这个0啊1啊的数列求和...就得到非零的个数,可这个nans分明是个逻辑数组 s m(x).n; stats toolbox里已经有了这些函数, 可以用 edit nanmean这个命令查看 下面这个是我编的 f nction m = mean_with_nan(a,dim) % mean_with_nan: mean val e, ignoring nans. % usage: % m = mean_with_nan(a) % m = mean_with_nan(a,dim) % inp t: % a - vector or m ltiple-dim arrays (with nan) % dim - take mean val e along dim % o tp t: % m - mean val e % for nargin =1 % m is a n mber, even if inp t is arrays, this f nction treats it as a vector % % for nargin = 2 % inp t m ltiple-dim array, similar as the f nction mean % m is the mean val e 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 = s m(~li,dim); n(n==0) = nan; m = s m(a,dim).n;