2

2つの行列間のperformcorrelationを使用すると、NaNが取得されますが、無視したいので、MATLABフォーラムで、NaNをnanmeanによって取得された平均に置き換えることはかなり良い置換であると読みました。そのため、次のコードを実行しましたが、結果に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

すべて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 

これにより、sinがinの非値の平均に置き換えNaNられます。cor1nanNaNcor1nan

于 2012-04-15T22:18:03.267 に答える