2

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

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 .. 我该如何解决这个问题?

4

1 回答 1

2

如果您的列全部为NaNnanmean则将保留它,就NaN好像我正确阅读了它一样。然后你下面的循环将替换为 a 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 

这将用非值的平均值替换NaNs incor1nanNaNcor1nan

于 2012-04-15T22:18:03.267 回答