Matlab 如何将NaN更改为最接近的数字(高于或低于)

Matlab 如何将NaN更改为最接近的数字(高于或低于),matlab,matrix,interpolation,nan,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

我有一个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
我想我可以使用某种插值来实现这一点,但我不完全确定如何实现

在这个senario中,我可以手动完成,但我将使用1000SX1000的矩阵,所以当时无法完成!我已经寻找了其他的例子来说明如何做到这一点,但是很多例子都将“南”改为“零”

提前谢谢你的帮助


Jordan

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

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

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

我想最重要的问题是:你为什么会有南?