Я работаю с 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. где "?" может принимать любое из соседних немаскированных значений.
Каков наиболее эффективный способ сделать это?
Спасибо за вашу помощь.