【问题标题】:How do you change NaNs to the closest number, either above or below如何将 NaN 更改为最接近的数字,高于或低于
【发布时间】:2013-01-22 02:57:09
【问题描述】:

我有一个 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

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

在这个场景中,我可以手动完成,但我将使用 1000sx1000 的矩阵,所以当时做不到!我已经寻找如何做到这一点的其他示例,但其中很多将 NaN 更改为零。

提前感谢您的帮助。

乔丹

【问题讨论】:

  • 恕我直言,最重要的问题是:你为什么有 NaN?

标签: matlab matrix interpolation nan


【解决方案1】:

使用inpaint_nans,这是 John D'Errico 的一个出色工具,它使用非 NaN 元素在二维数组中插入 NaN 元素。它也可以推断,因为它不使用数据的三角剖分。它提供了几种插值方法,在精度与速度和所需内存之间进行权衡。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多