Estoy trabajando con un 2D numpy masked_array en Python. Necesito cambiar los valores de datos en el área enmascarada de modo que sean iguales al valor desenmascarado más cercano.¿Completa los valores que faltan con el vecino más cercano en las matrices enmascaradas de Python nuked?
NB. Si hay más de un valor desenmascarado más cercano, puede tomar cualquiera de esos valores más cercanos (cualquiera que resulte más fácil de codificar ...)
p.
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]],
- necesito que se vea como esto:
>>> 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. dónde "?" podría tomar cualquiera de los valores adyacentes no enmascarados.
¿Cuál es la forma más eficiente de hacerlo?
Gracias por su ayuda.
Gran! Eso funciona para mis propósitos. Una pregunta: ¿se podría generalizar para trabajar con brechas de datos más grandes donde el valor desenmascarado más cercano está a más de un punto de distancia? –
@Pete: una forma rápida de hacerlo es ajustar los bucles for en 'while np.any (a.mask):'. @unutbu - Por cierto, es una manera astuta de implementar la interpolación del vecino más cercano. –
¡Gracias Joe! Mis felicitaciones me hacen muy feliz. :) – unutbu