得到0而不是NaN(Matlab prog)

时间:2016-03-22 06:51:38

标签: matlab

我正在使用Matlab版本2011a,当我尝试用NaN替换我的缺失值时遇到问题..而输出显示替换值为0而不是NaN。我能找到解决方案吗?

1 个答案:

答案 0 :(得分:1)

起初,我认为你想用零替换Nan值。 在阅读了您的进一步解释后,我现在明白您不希望Matlab自动用零替换NaN值。

为了做到这一点,将数组转换为double。 例如:

%int version
RF=int16([12 13 15, -8888 12 16,-8888 19 17]);
RF(RF==-8888) = NaN;
RF

%double version
RF=double([12 13 15, -8888 12 16,-8888 19 17]);
RF(RF==-8888) = NaN;
RF

第一个结果:

RF =

 12     13     15      0     12     16      0     19     17

第二个结果:

RF =

12    13    15   NaN    12    16   NaN    19    17

我之前的回答:

为了用零替换NAN值,使用MATLAB的isnan函数。

然而 - 我建议进一步检查,以便找出为什么你首先得到这些Nan值 - 确保它不是算法的错误或问题。

使用isnan函数的示例:

%defines a matrix
A = rand(5,5);
%adds Nan values to it
A([1,6,8,10,15]) = nan;
%prints original A
A

%replacing Nans with zeros
A(isnan(A)) = 0;

%printing A after cleaning
A

之前的结果:

A =

   NaN        NaN      0.9569    0.0530    0.4177
   0.7890    0.9077    0.1857    0.1554    0.6669
   0.6803       NaN    0.9870    0.6251    0.1863
   0.7103    0.9899    0.7671    0.3099    0.8293
   0.3857       NaN       NaN    0.6623    0.7091

后的结果:

A=

0         0         0.9569    0.0530    0.4177
0.7890    0.9077    0.1857    0.1554    0.6669
0.6803         0    0.9870    0.6251    0.1863
0.7103    0.9899    0.7671    0.3099    0.8293
0.3857         0         0    0.6623    0.7091