Elementos de filtro em NumPy Array

Vaibhav Vaibhav 30 janeiro 2023
  1. Elementos de filtro usando o método fromiter() em NumPy
  2. Elementos de filtro usando o método Boolean Mask Slicing em NumPy
  3. Elementos de filtro usando o método where() em NumPy
Elementos de filtro em NumPy Array

Freqüentemente, precisamos de valores de um array em uma ordem específica, geralmente em ordem crescente ou decrescente. Às vezes, também temos que pesquisar elementos de um array e recuperá-los ou filtrar alguns valores com base em algumas condições.

Este artigo irá apresentar como filtrar valores de um array NumPy.

Elementos de filtro usando o método fromiter() em NumPy

fromiter() cria um novo array unidimensional de um objeto iterável que é passado como um argumento. Podemos aplicar condições aos elementos do array de entrada e ainda fornecer essa nova matriz a esta função para obter os elementos desejados em um array NumPy.

A sintaxe do método fromiter() está abaixo.

fromiter(iterable, dtype, count, like)

Possui os seguintes parâmetros.

  • iterable - Um objeto iterável sobre o qual a função irá iterar.
  • dtype - Este parâmetro se refere ao tipo de dados do array retornada.
  • count - Este é um parâmetro opcional de número inteiro e se refere ao número de elementos que serão lidos no objeto iterável. O valor padrão deste parâmetro é -1, o que significa que todos os elementos serão lidos.
  • like - Este é um parâmetro booleano opcional. Ele controla a definição do array retornada.

A maneira de filtrar elementos usando o método fromiter() em NumPy é a seguinte.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
    (element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)

Resultado:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]

Primeiro, inicializamos um NumPy Array do qual desejamos filtrar os elementos. Em seguida, iteramos em todo o array e filtramos os valores que são menores que 6. Em seguida, lançamos esse novo array em um NumPy Array com o mesmo tipo de dados do array original.

Para saber mais sobre este método, consulte sua documentação oficial

Elementos de filtro usando o método Boolean Mask Slicing em NumPy

Este método é um pouco estranho, mas funciona perfeitamente no NumPy. Temos que mencionar a condição dentro do quadrado ou dos colchetes [] após o array. Em seguida, NumPy filtrará os elementos com base na condição e retornará uma nova matriz filtrada.

Este conceito pode não ser claro e até parecer complicado para alguns, mas não se preocupe. Temos alguns exemplos abaixo para explicar um pouco melhor.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6]  # Line 1
newArray2 = myArray[myArray % 2 == 0]  # Line 2
newArray3 = myArray[myArray % 2 != 0]  # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)]  # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)]  # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Resultado:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]

Conforme mencionado acima, adicionamos algumas condições entre os colchetes e a matriz de destino foi filtrada com base nessas condições. A variável que armazena o array, que neste caso myArray, representa um único elemento do array dentro dos colchetes.

Para aplicar várias condições e usar operadores lógicos, usamos dois métodos NumPy, a saber, logical_and() e logical_or() para a lógica and ou or respectivamente.

  • myArray < 6 - Filtra os valores inferiores a 6
  • myArray % 2 == 0 - Filtra os valores que são divisíveis por 2
  • myArray % 2 != 0 - Filtra os valores que não são divisíveis por 2
  • np.logical_and(myArray > 1, myArray < 5) - Filtra os valores maiores que um e menores que cinco.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - Filtra os valores que são divisíveis por dois ou menos de cinco.

Elementos de filtro usando o método where() em NumPy

Aqui está o último método, que usa o método where() da biblioteca NumPy. Ele filtra os elementos do array de destino com base em uma condição e retorna os índices dos elementos filtrados.

Você também pode usar este método para alterar os valores dos elementos que satisfazem a condição.

A sintaxe do método where() é mostrada abaixo.

where(condition, x, y)

Possui os seguintes parâmetros.

  • condition - É a condição booleana para a qual cada elemento do array é verificado.
  • x - É um valor dado aos elementos que satisfazem a condição ou um cálculo realizado nos elementos que satisfazem.
  • y - É um valor atribuído aos elementos que não satisfazem a condição ou um cálculo realizado nos elementos insatisfatórios.

Vamos ver como usar essa função para filtrar os elementos.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)

Resultado:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]

No trecho acima, todos os elementos que satisfazem a condição foram retornados como um array.

A função where() retorna uma tupla de arrayes NumPy. Portanto, consideramos apenas o primeiro array, que é a nossa resposta.

Como mencionei acima, você também pode atribuir valores personalizados e executar ações personalizadas sobre os elementos quando eles satisfazem a condição especificada e quando não.

Abaixo está um exemplo disso.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Resultado:

[1 2 3 4 5 6 7 8 9]
[ 5  5  5  5  5  5 -1 -1 -1]
[ 0  4  0 16  0 36  0 64  0]
[ 1 -1  3 -1  5 -1  7 -1  9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]

Dê uma olhada na saída. Veja como os elementos estão mudando com base nas condições e nos valores e cálculos fornecidos para manipular os elementos para a função where().

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.