如何将NaN更改为最接近的数字,无论是在上方还是下方

时间:2013-02-06 19:21:44

标签: matlab matrix interpolation nan

我有一个4x5矩阵,但我有一些NaN与值混合在一起。我真的想将NaN更改为最接近的数字,无论是在它上面还是在它下面(因为每一列都与下一列断开连接),如下所示:

A= NaN 10   35   150   1.5
   4.2 11   NaN  149   1.45
   4.8 NaN  36.1 153   1.3
   5.3 13   40   147   NaN

我想有一个将矩阵更改为:

的函数
B= 4.2 10   35   150   1.5
   4.2 11   35   149   1.45
   4.8 11   36.1 153   1.3
   5.3 13   40   147   1.3

我想我可以使用某种插值来做到这一点,但我不完全确定如何。

在这个场景中,我能够手动完成,但我会使用1000sx1000s的矩阵,所以不能这样做!我已经找到了其他如何执行此操作的示例,但其中很多都将NaN更改为零。

提前感谢您的帮助。

乔丹

2 个答案:

答案 0 :(得分:1)

使用inpaint_nans,John D'Errico的一个很棒的工具,它使用非NaN元素在2维阵列中插入NaN元素。它也可以推断,因为它不使用数据的三角测量。它提供了几种插值方法,可以在精度与速度和所需内存之间进行权衡。

答案 1 :(得分:0)

我不知道这个函数是否完全符合您的预期,但它可能会有所帮助:

knnimpute

作为一个例子

A = [1 2 5;4 5 7;NaN -1 8;7 6 0]

A =

     1     2     5
     4     5     7
   NaN    -1     8
     7     6     0
然后你打电话给

knnimpute(A)

产生

ans =

     1     2     5
     4     5     7
    -1    -1     8
     7     6     0