Replace NaN sequence according to values before and after the sequence

房东的猫 提交于 2019-12-01 07:37:54

问题


I would appreciate if someone can help me with this problem...

I have a vector

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

I would like to fill the NaN values according to this logic.

1) if the value that precedes the sequence of NaN is different from the one that follows the sequence => assign half of the NaNs to the first value and half to the second value

2) if the NaN seqence is between 2 equal values => fill the NaN with that value.

A should be then:

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

I have put one 1 within brakets because I assigned that value to the first half...the sequence of NaNs is odd.


回答1:


I am typing this in my phone, without MATLAB - so there can be some issues. But this should be close:

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



回答2:


If you have the image processing toolbox, you can use bwdist to calculate the index of the nearest non-NaN-neighbor:

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


来源:https://stackoverflow.com/questions/26386557/replace-nan-sequence-according-to-values-before-and-after-the-sequence

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!