MATLAB NaN替换

时间:2012-04-15 22:08:43

标签: matlab correlation

当我在两个矩阵之间使用执行相关时,我得到了NaN,但我想忽略它们,我在一些MATLAB论坛上读到,用nanmean获得的方法取代NaN是一个相当不错的替代品。所以我执行了以下代码,但我的结果仍然是NaNs。为什么会这样?

cor1nan=nanmean(correlations1);
mod1cor=isnan(correlations1);

for z=1:264
for a=1:264

 if(mod1cor(a,z)==1)
     correlations1(a,z)=cor1nan(z);
 end
 end
 end

注意到cor1nan中的一些值本身就是NaN ..我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您的列全部为NaN,那么nanmean如果我正确阅读,则会将其保留为NaN。然后你的循环将替换为NaN,从而保留它们。

如何解决它的建议如下。用以下代码替换您的代码:

  cor1nan=nanmean(correlations1);
  corAllnan = nanmean(cor1nan);
  cor1nan(isnan(cor1nan)) = corAllmean;
  mod1cor = isnan(correlations1);

  for z = 1:size(correlations1,2),
         correlations1(isnan(correlations1(:,z)),z) = cor1nan(z);
  end 

这会将NaN中的cor1nan替换为NaN

中非cor1nan值的平均值