API · NumPy
Función Python Numpy.where()
La función numpy where() comprueba los elementos de un array de entrada y genera una salida según la condición especificada.
En esta página
numpy.where() tiene dos formas que producen resultados distintos. Al llamar a numpy.where(condition), devuelve arreglos de índices para las posiciones en las que la condición es verdadera. Al llamar a numpy.where(condition, x, y), elige valores de x o y elemento por elemento. Usa la primera forma para localizar coincidencias y la segunda para crear un arreglo a partir de una condición.
Respuesta: numpy.where() devuelve índices o selecciona valores
Elige la forma que solo recibe la condición cuando necesitas posiciones, por ejemplo, índices que quieras consultar o usar en otra operación. Elige la forma de tres argumentos cuando necesitas un resultado cuyos valores dependan de una prueba. La condición determina qué alternativa aporta cada elemento del resultado: si es verdadera, se toma de x; si es falsa, se toma de y.
Sintaxis y parámetros de numpy.where()
Las firmas de llamada son numpy.where(condition) y numpy.where(condition, x, y). El argumento condition es un valor similar a un arreglo cuyos valores de verdad determinan el resultado. En la forma de tres argumentos, x proporciona los valores para las posiciones donde la condición es verdadera y y para aquellas donde es falsa. Pasa x e y juntos; no se pueden proporcionar por separado. Omite ambos si quieres obtener índices.
Para más detalles, consulta la documentación de NumPy 1.18 para numpy.where(). Este artículo se centra en las dos formas de llamada y en los ejemplos siguientes; no pretende abarcar todas las combinaciones posibles de dimensiones de los arreglos.
Obtener los índices coincidentes con numpy.where(condition)
Para una condición unidimensional, el resultado es una tupla de un elemento que contiene un arreglo de enteros. Esos enteros son posiciones en la entrada, no los valores que se encuentran en ellas. Usa directamente la tupla como índice del arreglo original; usa su primer elemento cuando necesites específicamente el arreglo de índices.
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([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)
Esta condición es verdadera en las posiciones 2 y 4, según la indexación de base cero de Python. Por tanto, el arreglo de índices devuelto señala dónde coincidieron los valores; no contiene los valores 12 y 15.
Seleccionar valores con numpy.where(condition, x, y)
La forma de tres argumentos devuelve valores seleccionados, no posiciones. En cada posición, si la condición es verdadera, se toma el valor correspondiente de x; si es falsa, se toma el de y. Por ejemplo, resulta útil para reemplazar los valores que no superan un umbral y conservar los que sí lo superan.
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
scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)
Aquí, cada puntuación se compara con 70. El resultado contiene "pass" para las puntuaciones iguales o superiores al umbral y "review" para las demás. Esta forma de llamada requiere que se proporcionen ambas alternativas.
Usar numpy.where() con arreglos multidimensionales
La misma regla de selección se aplica posición por posición a una condición bidimensional. Cada posición de salida se elige de la posición correspondiente en x o y. Esto hace que la forma de tres argumentos sea útil para transformar una matriz sin alterar la disposición de sus filas y columnas.
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, 25, 30], [18, 50, 5]])
replacement = np.full(values.shape, -1)
selected = np.where(values > 20, values, replacement)
print(selected)
La condición comprueba cada elemento. Los valores mayores que 20 se conservan en el resultado; en las demás posiciones se toma el -1 correspondiente de replacement. La salida mantiene la disposición bidimensional de la entrada.
Combinar condiciones con numpy.where()
Para combinar comparaciones elemento por elemento, pon cada comparación entre paréntesis y únelas con & para indicar que ambas condiciones deben ser verdaderas, o con | para indicar que basta con que una lo sea. Estos operadores funcionan con condiciones de arreglos. Los operadores escalares and y or de Python no sirven para combinar comparaciones elemento por elemento de arreglos.
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([1, 2, 3, 4, 5])
in_range = (values > 1) & (values < 5)
selected = np.where(in_range, values, 0)
print(selected)
La condición combinada es verdadera para 2, 3 y 4, por lo que esos valores se conservan; las posiciones fuera de ese intervalo reciben 0. Para comprobar si se cumple una condición u otra, usa | entre comparaciones entre paréntesis, como (values < 2) | (values > 4). Cada comparación crea un arreglo de valores de verdad y, a continuación, numpy.where() aplica la alternativa seleccionada en cada posición.