Trouver la première valeur non nulle le long de l'axe d'une triés en deux dimensions un tableau numpy

J'essaie de trouver le moyen le plus rapide pour trouver la première valeur non nulle pour chaque ligne de deux dimensions, tableau trié. Techniquement, les seules valeurs dans le tableau sont des zéros et des uns, et c'est "triés".

Par exemple, le tableau pourrait ressembler à ce qui suit:

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

Je pouvais utiliser le argmax fonction

argmax(v, axis=1))

à trouver quand il passe de zéro à un, mais je crois que ce serait faire une recherche exhaustive, le long de chaque ligne. Mon tableau sera de taille raisonnable (~2000x2000). Serait argmax toujours mieux faire juste un searchsorted approche pour chaque ligne dans une boucle for, ou est-il une meilleure alternative?

Aussi, le tableau sera toujours que la première position de l'un pour une ligne est toujours >= la première position de celui dans la ligne au-dessus (mais il n'est pas garanti qu'il y aura un dans les dernières lignes). J'ai pu exploiter cette avec une boucle for et un "indice de départ de la valeur" pour chaque ligne égale à la position de la première 1 de la rangée précédente, mais ai-je raison de penser que le numpy argmax fonction sera toujours mieux une boucle écrit en python.

Je voudrais juste comparer les alternatives, mais la longueur de l'arête de la matrice pourrait changer un peu (de 250 à 10 000).

J'attends la argmax fonction pour être plus rapide. Si elle est critique pour les performances que vous pourriez essayer de rédiger une extension en C

OriginalL'auteur user1554752 | 2012-07-31