jje*_*omi 3 matlab interpolation
我有一个值向量,如下所示:
1
2
3
NaN
4
7
NaN
NaN
54
5
2
7
2
NaN
NaN
NaN
5
54
3
2
NaN
NaN
NaN
NaN
4
NaN
Run Code Online (Sandbox Code Playgroud)
我该怎么用
interp1
以这种方式只插入可变数量的连续NaN值?例如,我想只插入那些最多有三个连续NaN值的NaN值.因此NaN,NaN NaN和NaN NaN NaN将被插值而不是NaN NaN NaN NaN.
谢谢你的任何帮助=)
PS如果我不能用interp1这样做,任何想法如何以另一种方式做到这一点?=)
举个例子,我给出的矢量将成为:
1
2
3
interpolated
4
7
interpolated
interpolated
54
5
2
7
2
interpolated
interpolated
interpolated
5
54
3
2
NaN
NaN
NaN
NaN
4
interpolated
Run Code Online (Sandbox Code Playgroud)
首先,找到所有NaN值序列的位置和长度:
nan_idx = isnan(x(:))';
nan_start = strfind([0, nan_idx], [0 1]);
nan_len = strfind([nan_idx, 0], [1 0]) - nan_start + 1;
Run Code Online (Sandbox Code Playgroud)
接下来,找到NaN不插入的元素的索引:
thr = 3;
nan_start = nan_start(nan_len > thr);
nan_end = nan_start + nan_len(nan_len > thr) - 1;
idx = cell2mat(arrayfun(@colon, nan_start, nan_end, 'UniformOutput', false));
Run Code Online (Sandbox Code Playgroud)
现在,插入所有内容并替换不应使用NaN值插回的元素:
x_new = interp1(find(~nan_idx), x(~nan_idx), 1:numel(x));
x_new(idx) = NaN;
Run Code Online (Sandbox Code Playgroud)