Fill in missing values with nearest neighbour in Python numpy masked arrays?

后端 未结 3 1546
不思量自难忘°
不思量自难忘° 2021-02-02 16:28

I am working with a 2D Numpy masked_array in Python. I need to change the data values in the masked area such that they equal the nearest unmasked value.

NB. If there ar

3条回答
  •  长发绾君心
    2021-02-02 17:00

    For more complicated cases you could use scipy.spatial:

    from scipy.spatial import KDTree
    x,y=np.mgrid[0:a.shape[0],0:a.shape[1]]
    
    xygood = np.array((x[~a.mask],y[~a.mask])).T
    xybad = np.array((x[a.mask],y[a.mask])).T
    
    a[a.mask] = a[~a.mask][KDTree(xygood).query(xybad)[1]]
    
    print a
      [[0 1 2 3 4 5 6 7 8 9]
      [10 11 12 13 14 15 16 17 18 19]
      [20 21 22 13 14 15 16 17 28 29]
      [30 31 32 32 44 45 46 38 38 39]
      [40 41 42 43 44 45 46 47 48 49]
      [50 51 52 53 54 55 56 57 58 59]
      [60 61 62 63 64 65 66 67 68 69]
      [70 71 72 73 74 75 76 77 78 79]
      [80 81 82 83 84 85 86 87 78 89]
      [90 91 92 93 94 95 96 97 98 99]]
    

提交回复
热议问题