Encontrar índices de coincidencias de una matriz en otra matriz

Tengo dos matrices numpy, A y B. A contiene valores únicos y B es una sub-matriz de A. Ahora estoy buscando una manera de obtener el índice de los valores de B dentro de A.

Por ejemplo:

A = np.array([1,2,3,4,5,6,7,8,9,10]) B = np.array([1,7,10]) # I need a function fun() that: fun(A,B) >> 0,6,9 

Puedes usar np.in1d con np.nonzero

 np.nonzero(np.in1d(A,B))[0] 

También puede usar np.searchsorted , si le importa mantener el orden:

 np.searchsorted(A,B) 

Para un caso genérico, cuando A y B son matrices sin clasificar, puede ingresar la opción de sorter en np.searchsorted , como así:

 sort_idx = A.argsort() out = sort_idx[np.searchsorted(A,B,sorter = sort_idx)] 

Me gustaría agregar a mi broadcasting favorita también en la mezcla para resolver un caso genérico –

 np.nonzero(B[:,None] == A)[1] 

Ejecución de la muestra

 In [125]: A Out[125]: array([ 7, 5, 1, 6, 10, 9, 8]) In [126]: B Out[126]: array([ 1, 10, 7]) In [127]: sort_idx = A.argsort() In [128]: sort_idx[np.searchsorted(A,B,sorter = sort_idx)] Out[128]: array([2, 4, 0]) In [129]: np.nonzero(B[:,None] == A)[1] Out[129]: array([2, 4, 0]) 

¿Has probado searchsorted ?

 A = np.array([1,2,3,4,5,6,7,8,9,10]) B = np.array([1,7,10]) A.searchsorted(B) # array([0, 6, 9]) 

Solo para estar completo: si los valores en A no son negativos y son razonablemente pequeños:

 lookup = np.empty((np.max(A) + 1), dtype=int) lookup[A] = np.arange(len(A)) indices = lookup[B]