Elementos de filtro em NumPy Array
-
Elementos de filtro usando o método
fromiter()em NumPy - Elementos de filtro usando o método Boolean Mask Slicing em NumPy
-
Elementos de filtro usando o método
where()em NumPy
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 6myArray % 2 == 0- Filtra os valores que são divisíveis por 2myArray % 2 != 0- Filtra os valores que não são divisíveis por 2np.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().
