¿Existe una función NumPy para devolver el primer índice de algo en una matriz?
Sé que existe un método para que una lista de Python devuelva el primer índice de algo:
>>> xs = [1, 2, 3]
>>> xs.index(2)
1
¿Existe algo así para las matrices NumPy?
Sí, dada una matriz array
y un valor item
para buscar, puede usar np.where
como:
itemindex = numpy.where(array == item)
El resultado es una tupla con primero todos los índices de las filas y luego todos los índices de las columnas.
Por ejemplo, si una matriz tiene dos dimensiones y contiene su artículo en dos ubicaciones, entonces
array[itemindex[0][0]][itemindex[1][0]]
sería igual a su artículo y también sería:
array[itemindex[0][1]][itemindex[1][1]]
Si necesita el índice de la primera aparición de un solo valor , puede usar nonzero
(o where
, que equivale a lo mismo en este caso):
>>> t = array([1, 1, 1, 2, 2, 3, 8, 3, 8, 8])
>>> nonzero(t == 8)
(array([6, 8, 9]),)
>>> nonzero(t == 8)[0][0]
6
Si necesita el primer índice de cada uno de muchos valores , obviamente puede hacer lo mismo que arriba repetidamente, pero hay un truco que puede ser más rápido. A continuación se encuentran los índices del primer elemento de cada subsecuencia :
>>> nonzero(r_[1, diff(t)[:-1]])
(array([0, 3, 5, 6, 7, 8]),)
Observe que encuentra el comienzo de ambas subsecuencias de 3 y de ambas subsecuencias de 8:
[ 1 , 1, 1, 2 , 2, 3 , 8 , 3 , 8 , 8]
Entonces es ligeramente diferente a encontrar la primera aparición de cada valor. En su programa, es posible que pueda trabajar con una versión ordenada t
para obtener lo que desea:
>>> st = sorted(t)
>>> nonzero(r_[1, diff(st)[:-1]])
(array([0, 3, 5, 7]),)