如果有人可以帮我解决这个问题,我将不胜感激......
我有一个载体
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的序列是奇数。
答案 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));