HOWTO · NumPy

Encuentre el primer índice de elemento en NumPy Array

Este tutorial demuestra cómo encontrar el índice de un elemento en un array en Python

En esta página

Para encontrar el primer índice de un valor en un array unidimensional de NumPy, usa np.where(array == value)[0][0] si sabes que habrá una coincidencia. La expresión devuelve la primera posición coincidente; si el valor podría no estar, comprueba antes que haya una coincidencia. Los índices de NumPy empiezan en cero.

Encontrar el primer índice coincidente con np.where()

np.where(condition) devuelve una tupla que contiene un array de índices por cada dimensión. En un array unidimensional, el primer elemento de la tupla contiene las posiciones coincidentes. Selecciona su primer elemento para obtener la primera coincidencia.

Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

values = np.array([10, 20, 30, 40, 50, 20])
target = 20
matches = np.where(values == target)[0]
print(int(matches[0]))
1

Aquí, matches contiene las dos posiciones donde aparece 20, y matches[0] selecciona la primera. Si no hay coincidencias, matches no contiene elementos y, por tanto, al intentar indexarlo se produce un IndexError. Si no tienes garantizada una coincidencia, comprueba matches.size antes de seleccionar un índice. La forma de tres argumentos, np.where(condition, x, y), selecciona valores de x o y; no es la forma que devuelve índices mostrada aquí.

Usar np.nonzero() para encontrar índices coincidentes

Para una condición booleana, np.nonzero() devuelve los índices de sus elementos verdaderos. Al igual que la forma de un argumento de np.where(), devuelve una tupla de arrays de índices, uno por cada dimensión del array. En un array unidimensional, toma el primer array de esa tupla.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

values = np.array([4, 7, 4, 9])
positions = np.nonzero(values == 4)[0]
print(positions.tolist())

El resultado contiene todas las posiciones coincidentes, en el orden del array. Usa positions[0] para obtener solo la primera coincidencia, pero comprueba antes que el array no esté vacío. En un array multidimensional, cada elemento de la tupla contiene coordenadas de una dimensión; combina las entradas correspondientes para localizar cada coincidencia.

Usar np.argmax() con una coincidencia booleana

np.argmax() devuelve la posición del valor más grande. Al aplicarlo a una máscara booleana, devuelve la posición del primer True, porque True es mayor que False. Una máscara cuyos valores son todos False también da como resultado 0, así que comprueba que haya una coincidencia antes de usar el resultado.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

values = np.array([5, 8, 3, 8])
mask = values == 8
first = int(np.argmax(mask)) if np.any(mask) else None
print(first)

Este patrón devuelve None si el valor buscado no está y, en caso contrario, la primera posición coincidente. Para obtener todas las posiciones coincidentes, usa np.where() o np.nonzero().

Usar list.index() después de convertir el array

Al convertir un array unidimensional en una lista de Python, puedes usar el método de lista list.index(). Este devuelve la primera aparición. La conversión crea una lista de Python, por lo que este enfoque añade costes de tiempo y memoria; suele ser más práctico para arrays pequeños o cuando el código ya trabaja con listas.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

values = np.array([10, 20, 30, 20])
items = values.tolist()
target = 20
index = items.index(target) if target in items else None
print(index)

La comprobación de pertenencia indica explícitamente que el resultado es None cuando falta el valor; llamar directamente a items.index(target) en ese caso genera un ValueError. Tanto la comprobación como la búsqueda recorren la lista, así que, para una sola búsqueda, puedes capturar ValueError alrededor de list.index().

Usar un bucle para aplicar lógica personalizada

Un bucle resulta útil cuando cada elemento necesita una comprobación personalizada difícil de expresar como una condición vectorizada de NumPy. Inicializa el resultado con un valor que indique que no se encontró nada y detén el bucle en cuanto aparezca la primera coincidencia.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

values = np.array([12, 15, 18, 21])
index = None

for position, value in enumerate(values):
    if value % 2 == 0 and value > 12:
        index = position
        break

print(index)

El bucle examina los elementos uno por uno y termina en el primer valor que cumple ambas condiciones. Para una comparación de igualdad sencilla, una máscara de NumPy suele ser más concisa; usa el bucle cuando la regla de coincidencia requiera ramificaciones o estado personalizado.

Gestionar coincidencias ausentes, valores repetidos y dimensiones del array

Elige el resultado que corresponda a tu tarea:

  • Para obtener la primera coincidencia en un array unidimensional, busca las posiciones con np.where() o np.nonzero(), comprueba que haya al menos una y selecciona la primera.
  • Para obtener todas las coincidencias, conserva el array completo de índices. Los valores repetidos producen varias posiciones; no selecciones [0] si las necesitas todas.
  • En un array bidimensional, np.where(matrix == target) devuelve (row_indices, column_indices). Las entradas correspondientes forman pares de coordenadas. Por ejemplo, (rows[0], columns[0]) indica la fila y la columna de la primera coincidencia, no un único índice lineal.
  • Si necesitas específicamente una posición lineal en un array multidimensional, aplana primero el array y busca en los valores resultantes. Cuando sea necesario, convierte esa posición lineal de nuevo en coordenadas con np.unravel_index().
  • Para una máscara no vacía cuyos valores son todos False, np.argmax() devuelve cero, pero esa posición no indica que haya una coincidencia. Si la máscara está vacía, np.argmax() genera un ValueError. La expresión protegida anterior comprueba primero np.any(mask), por lo que devuelve None tanto si la máscara no contiene ningún valor verdadero como si está vacía.

Para búsquedas habituales en arrays numéricos, np.where() es una opción directa cuando necesitas la primera coincidencia o todas. Usa np.nonzero() para obtener las mismas posiciones que cumplen una condición verdadera, np.argmax() con una máscara booleana después de comprobarla, list.index() cuando te resulte útil trabajar con una lista de Python, y un bucle para reglas de coincidencia personalizadas.