2010-07-16 34 views
5

Muy bien, pregunta de novato extremo aquí. En mi programa, genero una matriz numpy 2D, algunas de las cuales faltan (no el tipo "nan" como inexistente, sino el tipo "Ninguno" o NoneType). Me gustaría poner una máscara sobre estas entradas, pero parece que tengo problemas para hacerlo. Por lo general, para enmascarar sobre, por ejemplo, todas las entradas con valor de 2, lo haríaEncontrar valores faltantes en una matriz numpy

A = np.ma.masked_where (A [A == 2], A)

En este caso, Eso no Parece que no funciona, sin importar lo que intente para el primer parámetro. ¿Pensamientos?

Respuesta

5

Puesto que usted tiene -- entradas de la matriz, que supongo que significa que ya están enmascarados:

>>> m = ma.masked_where([True, False]*5, arange(10)) 
>>> print m 
[-- 1 -- 3 -- 5 -- 7 -- 9] 

Por lo tanto, yo diría que las entradas ya están enmascarados y que se pueden utilizar directamente la matriz .

Si desea crear una matriz que contiene sólo el valor no enmascarada, puede hacerlo

>>> m[~m.mask] 
[1 3 5 7] 

donde m es su gama de máscaras.

Si usted quiere tener la lista de valores enmascarados, sólo tiene que seleccionar los otros valores:

>>> m[m.mask] 
[0 2 4 6 8] 

Tenga en cuenta que los valores que faltan son no Ninguno, pero son los valores originales, por lo general. De hecho, una matriz de enteros no puede contener None.

Si desea que los índices de los valores enmascarados, que puede hacer:

>>> numpy.nonzero(m.mask) 

El documentation de numpy.nonzero() describe cómo se debe interpretar su resultado.

+0

Buen punto. Después de más investigación, veo que tienes razón. Los valores que realmente son el problema parecen ser unos que no había notado antes, que en realidad son "Ninguno". Entonces, ahora voy a cambiar la pregunta a lo que debería haber sido: ¿cómo se puede encontrar los valores "Ninguno"? A [A == None] simplemente da A [0 ,:] por alguna razón. – user391045

+0

Agregué más información en mi respuesta: ¡espero que encuentres lo que necesitas en ella! :) – EOL

+0

@ dave-schultz: Si su reafirmación en su comentario anterior es una declaración más clara de la pregunta, sería útil si editó su pregunta para reflejar esto. Mucha más gente leerá tu pregunta que tu comentario aquí. – tom10

5

Para encontrar los elementos en una matriz numpy que son Ninguno, puede usar numpy.equal. Aquí hay un ejemplo:

import numpy as np 
import MA 

x = np.array([1, 2, None]) 

print np.equal(x, None) 
# array([False, False, True], dtype=bool) 

# to get a masked array 
print MA.array(x, mask=np.equal(x,None)) 
# [1 ,2 ,-- ,] 
Cuestiones relacionadas