Estoy tratando de encontrar la forma más rápida de encontrar el primer valor distinto de cero para cada fila de una matriz ordenada bidimensional. Técnicamente, los únicos valores en la matriz son ceros y unos, y está "ordenado".Encontrar el primer valor distinto de cero a lo largo del eje de una matriz numpy bidimensional ordenada
Por ejemplo, la matriz podría ser similar al siguiente:
v =
0 0 0 1 1 1 1
0 0 0 1 1 1 1
0 0 0 0 1 1 1
0 0 0 0 0 0 1
0 0 0 0 0 0 1
0 0 0 0 0 0 1
0 0 0 0 0 0 0
que podría utilizar la función argmax
argmax(v, axis=1))
encontrar cuando se cambia de cero a uno , pero creo que esto haría una búsqueda exhaustiva a lo largo de cada fila. Mi matriz tendrá un tamaño razonable (~ 2000x2000). ¿Haría argmax aún mejor que simplemente haciendo un enfoque de búsqueda para cada fila dentro de un bucle for, o hay una mejor alternativa?
Además, la matriz siempre será tal que la primera posición de una para una fila siempre es> = la primera posición de una en la fila de arriba (pero no se garantiza que haya una en las últimas filas). Podría explotar esto con un bucle for y un "valor inicial de índice" para cada fila igual a la posición del primer 1 de la fila anterior, pero estoy en lo cierto al pensar que la función numpy argmax aún superará un bucle escrito en python .
Simplemente compararía las alternativas, pero la longitud del borde de la matriz podría cambiar bastante (de 250 a 10.000).
que muy haría mucho esperar que la función argmax sea más rápida. Si es crítico para el rendimiento, podría intentar escribir una extensión en C – SudoNhim