2012-02-15 41 views
13

Tengo dos matrices NumPy, por ejemplo:¿Cómo se filtra una matriz numpy usando los valores de otra matriz?

a = [1,2,3,4,5] 

y un conjunto de filtros, por ejemplo:

f = [False, True, False, False, True] 

len(a) == len(f) 

¿Cómo puedo obtener una nueva matriz numpy con sólo los valores en una donde el mismo índice de f es cierto? En mi caso: [2, 5].

De acuerdo con la solución aceptada (con diferentes valores):

>>> a = numpy.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = numpy.array([True, False, True, False, True, False, True, False, True, False]) 
>>> a[b] 
array([1, 3, 5, 7, 9]) 
+2

parece que b es una lista, no una matriz, b debe ser una matriz booleana. Pruebe 'b = np.asarray (b, 'bool')' –

Respuesta

22

NumPy apoya boolean indexing

a[f] 

Esto supone que a y f son matrices NumPy en lugar de listas de Python (como en la pregunta) Puede convertir con f = np.array(f).

+0

Esto no parece funcionar: vea la pregunta. –

+2

Asegúrate de que 'b' sea una matriz numpy. Actualizado en respuesta. – YXD

+1

Lo cambié según su solución y comento en la pregunta ... ¡ahora funciona, gracias! –

3

Si aún no necesita arreglos numpy, aquí está una lista sencilla:

import itertools 
print itertools.compress(a, f) 

un pre-2.7 versiones de Python, debe rodar su propia (consulte el manual):

def compress(data, selectors): 
    return (d for d, s in itertools.izip(data, selectors) if s) 
Cuestiones relacionadas