2011-12-06 26 views
8

Se puede usar la función numpyextract para que coincida con un elemento de una matriz. El siguiente código coincide con un elemento 'a.' exactamente en una matriz. Supongamos que quiero para que coincida con todos los elementos que contienen '.', ¿cómo lo haría? Tenga en cuenta que en este caso, habría dos coincidencias. También me gustaría obtener el número de fila y columna de las coincidencias. El método no tiene que usar extract; cualquier método servirá Gracias.buscando elemento de la matriz numpy que cumple la condición

In [110]: x = np.array([['a.','cd'],['ef','g.']]) 

In [111]: 'a.' == x 
Out[111]: 
array([[ True, False], 
     [False, False]], dtype=bool) 

In [112]: np.extract('a.' == x, x) 
Out[112]: 
array(['a.'], 
     dtype='|S2') 
+4

Sería menos confuso escribir 'x == 'a.'', no es que ayude a responder la pregunta – Benjamin

Respuesta

9

Puede utilizar el string operations: editar

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> x[np.char.find(x, '.') > -1] 
array(['a.', 'g.'], 
     dtype='|S2') 

: Según la petición en los comentarios ... Si desea averiguar los índices de donde la condición de destino es cierto, el uso numpy.where:

>>> np.where(np.char.find(x, '.') > -1) 
(array([0, 1]), array([0, 1])) 

o

>>> zip(*np.where(np.char.find(x, '.') > -1)) 
[(0, 0), (1, 1)] 
+3

Agradable, nunca se supo sobre 'char' – Benjamin

+0

Gracias. ¿Alguna forma de encontrar la fila y la columna? –

+0

@mac: Vea el comentario al final de la pregunta principal. No podría encajarlo en la noción de SO de un comentario. –

3

¿Qué le parece esto?

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> selector = np.array(['.' in s for s in x.flat]).reshape(x.shape) 
>>> x[selector] 
array(['a.', 'g.'], 
     dtype='|S2') 
+0

¡¡¡Buena solución !! – Benjamin

+0

Gracias. ¿Alguna forma de encontrar la fila y la columna? –

+0

Esto funciona para mí, gracias. –

Cuestiones relacionadas