根据序列之前和之后的值替换NaN序列

时间:2014-10-15 15:39:12

标签: matlab nan fill

如果有人可以帮我解决这个问题,我将不胜感激......

我有一个载体

A = [NaN 1 1 1 1 NaN NaN NaN NaN NaN 2 2 2 NaN NaN NaN 2 NaN NaN 3 NaN NaN];

我想根据这个逻辑填写NaN值。

1)如果NaN序列之前的值不同于序列之后的值=>将一半的NaN分配给第一个值,将一半分配给第二个值

2)如果NaN序列在2个相等的值之间=>用该值填充NaN。

A应该是:

A = [1 1 1 1 1 1 1 (1) 2 2 2 2 2 2 2 2 2 2 3 3 3] 

我已经将一个1放入了支架中,因为我将该值分配给了前半部分... NaN的序列是奇数。

2 个答案:

答案 0 :(得分:4)

我在手机中键入此内容,没有MATLAB - 因此可能存在一些问题。但这应该是接近的:

t = 1:numel(A);
Anew = interp1(t(~isnan(A)),A(~isnan(A)),t,'nearest','extrap');

答案 1 :(得分:1)

如果您有图像处理工具箱,可以使用bwdist计算最近的非NaN邻居的索引:

nanMask = isnan(A);
[~,idx] = bwdist(~nanMask);
A(nanMask) = A(idx(nanMask));