在MATLAB中用其他值(平均值)替换NaN

Joe*_*Joe -3 matlab matrix nan

我有矩阵A如:

A = [1  2  3 NaN;
     1 NaN 2 NaN;
     NaN 2 3 4]
Run Code Online (Sandbox Code Playgroud)

我想用预定义的值替换每个NaNin A,例如我的列vector B:

B = [2; 1.5; 3]
Run Code Online (Sandbox Code Playgroud)

因此,对于第二行,我想获得一个新矩阵,其中此特定行中的每个NaN都被替换为1.5.它将2在第一行和3第三行.

除了循环整个矩阵之外,还有更好的方法吗?我用了一个for与循环ifelse条件.但是,此解决方案执行速度不是很快.

Sar*_*ama 5

这是一个使用的解决方案repelem(在R2015a中引入).诀窍是B根据NaN每行中出现的次数重复输入A.

req = A.';
req(isnan(req)) = repelem(B, sum(isnan(req)));
req = req.';
Run Code Online (Sandbox Code Playgroud)

如果你也想计算B,使用mean'omitnan'标志(在R2015a介绍),即

B = mean(A,2,'omitnan');
Run Code Online (Sandbox Code Playgroud)