当我在两个矩阵之间使用执行相关时,我得到了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 ..我如何解决这个问题?
答案 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
值的平均值