2012-08-25 19 views
6

Tengo una matriz maestra numpy. Dada otra serie de valores de búsqueda, con elementos que se repiten, quiero producir los índices de estos valores de búsqueda en la matriz maestra.Buscar índices de una lista de valores en una matriz numpy

Ej: matriz maestra está [1,2,3,4,5], una matriz de búsqueda es [4,2,2,3]

Solución: [3,1,1,2]

¿Hay una función numpy "nativa" que hace esto de manera eficiente (es decir, a velocidad C, en lugar de velocidad de pitón)?

Conozco la siguiente solución, pero, primero, es una lista de Python, y en segundo lugar, buscará el índice de 2 dos veces.

ma = np.array([1,2,3,4,5]) 
sl = np.array([4,2,2,3]) 
ans = [np.where(ma==i) for i in sl] 

Además, si tengo que recurrir a la clasificación y la búsqueda binaria, lo haré como último recurso (juegos de palabras no destinados a todo tipo de niveles). Estoy interesado en encontrar si me falta algo básico de la biblioteca numpy. Estas listas son muy grandes, por lo que el rendimiento es primordial.

Gracias.

Editar: Antes de publicar lo hubiera intentado lo siguiente con pésimos resultados:

[np.searchsorted(ma,x) for x in sl] 

La solución Publicado por @pierre es mucho más performante y es exactamente lo que estaba buscando.

Respuesta

14

¿Funcionaría np.searchsorted para usted?

>>> master = np.array([1,2,3,4,5]) 
>>> search = np.array([4,2,2,3]) 
>>> np.searchsorted(master, search) 
array([3, 1, 1, 2]) 
+0

¡Absolutamente! Acabo de terminar de perfilar tu código y funciona muy bien. Editaré mi pregunta para publicar resultados. – Fenchurch

Cuestiones relacionadas