¿Existe una función NumPy para devolver el primer índice de algo en una matriz?

Resuelto Nope asked hace 15 años • 22 respuestas

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?

Nope avatar Jan 11 '09 08:01 Nope
Aceptado

Sí, dada una matriz arrayy un valor itempara buscar, puede usar np.wherecomo:

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]]
Alex avatar Jan 11 '2009 03:01 Alex

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 tpara obtener lo que desea:

>>> st = sorted(t)
>>> nonzero(r_[1, diff(st)[:-1]])
(array([0, 3, 5, 7]),)
Vebjorn Ljosa avatar Jun 25 '2009 15:06 Vebjorn Ljosa