API · NumPy

Python Numpy.where() Função

A função numpy where() verifica elementos em um array de entrada e gera saída de acordo com a condição especificada.

Nesta página

numpy.where() tem duas formas com resultados diferentes. Na chamada numpy.where(condition), retorna arrays de índices das posições em que a condição é verdadeira. Na chamada numpy.where(condition, x, y), escolhe valores de x ou y elemento a elemento. Use a primeira forma para localizar correspondências e a segunda para criar um array com base em uma condição.

Resposta: numpy.where() retorna índices ou seleciona valores

Escolha a forma somente com a condição quando precisar das posições, por exemplo, de índices para inspecionar ou usar em outra operação. Escolha a forma com três argumentos quando precisar de um resultado cujos valores dependam de um teste. A condição determina de qual alternativa vem cada elemento do resultado: se for verdadeira, seleciona de x; se for falsa, seleciona de y.

Sintaxe e parâmetros de numpy.where()

As assinaturas de chamada são numpy.where(condition) e numpy.where(condition, x, y). O argumento condition é um valor semelhante a um array, cujos valores lógicos determinam o resultado. Na forma com três argumentos, x fornece os valores das posições em que a condição é verdadeira, e y fornece os valores das posições em que ela é falsa. Passe x e y juntos; eles não podem ser fornecidos separadamente. Omita ambos quando quiser obter índices.

Para mais detalhes, consulte a documentação do NumPy 1.18 para numpy.where(). Este artigo se concentra nas duas formas de chamada e nos exemplos a seguir; não pretende abranger todas as combinações de formatos de array.

Obter índices correspondentes com numpy.where(condition)

Para uma condição unidimensional, o resultado é uma tupla com um único item, que contém um array de inteiros. Esses inteiros são posições na entrada, não os valores encontrados nessas posições. Use o resultado da tupla diretamente para indexar o array original; use o primeiro item quando precisar especificamente do array de índices.

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import numpy as np

values = np.array([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)

A condição é verdadeira nas posições 2 e 4, considerando a indexação do Python, que começa em zero. Portanto, o array de índices retornado indica onde os valores corresponderam; ele não contém os valores 12 e 15.

Selecionar valores com numpy.where(condition, x, y)

A forma com três argumentos retorna valores selecionados, e não posições. Em cada posição, se a condição for verdadeira, o resultado recebe o valor correspondente de x; se for falsa, recebe o valor de y. Por exemplo, essa forma é útil para substituir valores que não atingem um limite e manter os que o atingem.

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import numpy as np

scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)

Aqui, cada pontuação é comparada com 70. O resultado contém "pass" para pontuações iguais ou superiores ao limite e "review" para as demais. Os dois rótulos permanecem em inglês no exemplo imutável. As duas alternativas são fornecidas, conforme exigido por essa forma de chamada.

Usar numpy.where() com arrays multidimensionais

A mesma regra de seleção se aplica posição a posição a uma condição bidimensional. Cada posição da saída é selecionada da posição correspondente em x ou y. Assim, a forma com três argumentos é útil para transformar uma matriz sem alterar sua organização em linhas e colunas.

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em 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)

A condição verifica cada elemento. Os valores maiores que 20 permanecem no resultado, e as outras posições recebem o valor -1 correspondente de replacement. A saída mantém a organização bidimensional da entrada.

Combinar condições com numpy.where()

Para combinar comparações elemento a elemento, coloque cada comparação entre parênteses e una-as com & para indicar que ambas as condições são verdadeiras ou com | para indicar que pelo menos uma delas é verdadeira. Esses operadores funcionam com condições em arrays. Os operadores escalares and e or do Python não substituem a combinação de comparações elemento a elemento em arrays.

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em 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)

A condição combinada é verdadeira para 2, 3 e 4, então esses valores são mantidos; as posições fora desse intervalo recebem 0. Para testar uma condição ou outra, use | entre comparações entre parênteses, como em (values < 2) | (values > 4). Cada comparação cria um array de valores lógicos, e numpy.where() aplica então a alternativa selecionada em cada posição.