Tengo una gran variedad numpy:Numpy de búsqueda (Mapa o punto)
array([[32, 32, 99, 9, 45], # A
[99, 45, 9, 45, 32],
[45, 45, 99, 99, 32],
[ 9, 9, 32, 45, 99]])
y una variedad de gran ish de valores únicos en un orden particular:
array([ 99, 32, 45, 9]) # B
Cómo puedo rápidamente (no hay diccionarios de python, no hay copias de A
, no hay bucles pitón) reemplazan a los valores en A
de manera que se convierten en los índices del de los valores en B
:?
array([[1, 1, 0, 3, 2],
[0, 2, 3, 2, 1],
[2, 2, 0, 0, 1],
[3, 3, 1, 2, 0]])
Me siento muy tonto por no poder hacer esto de la cabeza, ni encontrarlo en la documentación. Puntos fáciles!
Esta solución realiza moderadamente rápido para mi caso de uso (B.Size << A.size), pero para el registro, la solución de @ unutbu parece tener un mejor rendimiento general. Sin embargo, ninguno de los dos era una solución "en el lugar" que quizás insinué que quería cuando dije "reemplazar los valores en' A '". ..que no creo que sea posible sin Cython. ¡Gracias a los dos! – Paul
También encontré que la solución de unutbu es generalmente más rápida excepto cuando B.size << A.size. Siempre es divertido ver múltiples soluciones y jugar con la optimización – JoshAdel