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()
.