Sto cercando di trovare il modo più veloce per trovare il primo valore diverso da zero per ogni riga di un array ordinato bidimensionale. Tecnicamente, gli unici valori nella matrice sono zero e uno, ed è "ordinato".Ricerca del primo valore diverso da zero lungo l'asse di un array numpy bidimensionale ordinato
Per esempio, la matrice potrebbe essere simile al seguente:
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
ho potuto utilizzare la funzione argmax
argmax(v, axis=1))
da trovare quando si passa da zero a uno , ma credo che farebbe una ricerca esauriente lungo ogni riga. Il mio array avrà dimensioni ragionevoli (~ 2000x2000). Argmax potrebbe ancora sovraperformare solo facendo un approccio di ricerca per ogni riga all'interno di un ciclo for, o c'è un'alternativa migliore?
Inoltre, la matrice sarà sempre tale che la prima posizione di una per una riga è sempre> = la prima posizione di una nella riga sopra di essa (ma non è garantito che ci sarà uno in le ultime poche righe). Potrei sfruttare questo con un ciclo for e un "valore indice iniziale" per ogni riga uguale alla posizione del primo 1 della riga precedente, ma sono corretto nel pensare che la funzione numma argmax continuerà a sovraperformare un ciclo scritto in python .
Vorrei solo confrontare le alternative, ma la lunghezza del bordo della matrice potrebbe cambiare un po '(da 250 a 10.000).
lo farei molto molto si aspetta che la funzione argmax sia più veloce. Se è critico per le prestazioni, potresti provare a scrivere un'estensione in C – SudoNhim