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