Заполнить отсутствующие значения ближайшим соседом в массивах Python с маскировкой numpy?

Я работаю с 2D Numpy masked_array в Python. Мне нужно изменить значения данных в замаскированной области так, чтобы они равнялись ближайшему немаскированному значению.

NB. Если имеется более одного ближайшего немаскированного значения, тогда оно может принимать любое из этих ближайших значений (которое оказывается наиболее простым для кодирования…)

например

import numpy
import numpy.ma as ma

a = numpy.arange(100).reshape(10,10)
fill_value=-99
a[2:4,3:8] = fill_value
a[8,8] = fill_value
a = ma.masked_array(a,a==fill_value)

>>> a  [[0 1 2 3 4 5 6 7 8 9]
  [10 11 12 13 14 15 16 17 18 19]
  [20 21 22 -- -- -- -- -- 28 29]
  [30 31 32 -- -- -- -- -- 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 -- 89]
  [90 91 92 93 94 95 96 97 98 99]],
  • Мне нужно, чтобы оно выглядело так:
> >> a.data
 [[0 1 2 3 4 5 6 7 8 9]
 [10 11 12 13 14 15 16 17 18 19]
[20 21 22? 14 15 16? 28 29]
[30 31 32? 44 45 46? 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? 89]
 [90 91 92 93 94 95 96 97 98 99]],

NB. где "?" может принимать любое из соседних немаскированных значений.

Каков наиболее эффективный способ сделать это?

Спасибо за вашу помощь.

13
задан Pete W 7 September 2010 в 20:17
поделиться