nan替换为下一个真正的价值。

11视图(30天)
乍得格林
乍得格林 2014年10月31日
评论道: 图像分析 2021年8月25日
我如何替换所有 值在数组中的下一个non-NaN值数组?我有
x =[南1 1 3南南4];
我想 x
x = [1 1 1 3 4 4 4];
下面的工作,但是我想用更少的移动部件:
k =找到(isnan (x))
x (k) = x(找到(1:长度(x) > k & isfinite (x) 1,“第一”));
结束

接受的答案

乍得格林
乍得格林 2014年11月1日
谢谢你的建议,你们。很高兴,R2014b“next”和“前”选项1 d插值。我最后写 一个函数 在旧的2012 b做这项工作。

更多的答案(4)

图像分析
图像分析 2014年10月31日
我不会担心。如果成功的话,这样很好。如果你有数百万个元素或2 d图像,还有功能可以在图像处理工具箱,像imfill ()。

肖恩·德Wolski
肖恩·德Wolski 2014年10月31日
编辑:肖恩·德Wolski 2014年10月31日
x =[南1 1 3南南4];
idx = isnan (x);
idxnan =找到(idx);
idxnotnan =找到(~ idx);
fillv = interp1 ([-flintmax idxnotnan], [0 x (idxnotnan)], idxnan,“下一个”);
x (idx) = fillv;
可能慢,很难找出比 循环,它需要R2014b;但是它很酷!
2的评论
图像分析
图像分析 2021年8月25日
@yogan Sganzerla ,flintmax内置:
> > flintmax
ans =
9.00719925474099 e + 15

登录置评。


每•艾萨克森
每•艾萨克森 2014年10月31日
编辑:每•艾萨克森 2014年10月31日
如果今天早上 x(结束) 安康是一个数字
任何(isnan (x))
x1 = [x(2:结束),正);
x (isnan (x)) = x1 (isnan (x));
结束
任何(isnan (x))
不是= isnan (x);
(是)= x([假,并(1:end-1)]);
结束
2的评论
图像分析
图像分析 2021年7月12日
@yogan Sganzerla 试试这个:
x =[南1 1 3 4南南南南南)
nanIndexes =找到(isnan (x))
nonNanIndexes =找到(~ isnan (x))
%领先nan第一个非nan值
如果nonNanIndexes (1) ~ = 1
x (1: nonNanIndexes (1) - 1) = x (nonNanIndexes (1))
结束
%拖曳nan最后一个非nan值
如果nonNanIndexes(结束)~ =长度(x)
x (nonNanIndexes(结束)+ 1:结束)= x (nonNanIndexes(结束)
结束
%现在再生变化上的索引向量
nanIndexes =找到(isnan (x))
nonNanIndexes =找到(~ isnan (x))
%南索引替换最后non-nan价值之前。
k = 1:长度(nanIndexes)
thisIndex = nanIndexes (k);
(thisIndex) = x (thisIndex - 1)
结束

登录置评。


罗杰·斯塔福德
罗杰·斯塔福德 2014年10月31日
这是另一种方式:
t = isnan (x);
f1 =找到(t);
f2 =找到(diff ([t,假])= = 1)+ 1;
f3 = 0(1、长度(f1));
f3(找到(diff ([1, f1]) > 1)) = diff ([0, f2]);
f3 = cumsum (f3);
x2 = [x, x(结束)];
x (f1) = x2 (f3);

类别

找到更多的在数值类型帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!