Tengo algunos datos, expresados como una matriz de Numpy, que tiene una secuencia que se ve ligeramente así:

np.array([1, 0, 2, 5, 10, 6, 2, 0, 4, 1, 0, 1, 2, 3, 4, 2, 0, 0, 0, 0, 0, 0, 0])

Me gustaría saber en qué posición está el último valor distinto de cero de esta matriz, por lo que en este caso, el "2" que ocurre en la posición 15.

¿Cuál es la forma más rápida y fácil de hacer esto? Posiblemente estoy generando una gran cantidad de estos, por lo que mi plan inicial, que consistía en iterar sobre la matriz, eliminar el último elemento si = 0, luego tomar la longitud de la matriz resultante, que parece potencialmente demasiado lenta para ser útil .

0
Fomite 5 sep. 2014 a las 19:50

2 respuestas

La mejor respuesta

Puede usar la función nonzero:

>>> arr1.nonzero()[0][-1]
15
5
Shashank Agarwal 5 sep. 2014 a las 16:04

Con a como su matriz, puede usar np.where para especificar la condición que está buscando:

>>> np.where(a != 0)[0][-1]
15

Esta función devuelve los índices de matriz para los que se cumple una condición dada (en este caso, los índices de todos los elementos que no son 0). (En realidad, np.where(a != 0) devuelve una tupla que contiene la matriz, por lo que accedemos a ella con [0]).

[-1] es la notación familiar de Python para acceder al último elemento de un objeto iterable.

4
Alex Riley 5 ene. 2017 a las 21:16