Elementos de filtro en un array NumPy

Vaibhav Vaibhav 30 enero 2023
  1. Filtrar elementos usando el método fromiter() en NumPy
  2. Filtrar elementos usando el método de corte de máscara booleana en NumPy
  3. Filtrar elementos usando el método where() en NumPy
Elementos de filtro en un array NumPy

A menudo, necesitamos valores de un array en un orden específico, generalmente en orden ascendente o descendente. A veces, también tenemos que buscar elementos de un array y recuperarlos o filtrar algunos valores en función de algunas condiciones.

Este artículo presentará cómo filtrar valores de un array NumPy.

Filtrar elementos usando el método fromiter() en NumPy

fromiter() crea una nueva matriz unidimensional a partir de un objeto iterable que se pasa como argumento. Podemos aplicar condiciones a los elementos del array de entrada y, además, dar esa nueva matriz a esta función para obtener los elementos deseados en un array NumPy.

La sintaxis del método fromiter() se muestra a continuación.

fromiter(iterable, dtype, count, like)

Tiene los siguientes parámetros.

  • iterable: objeto iterable sobre el que iterará la función.
  • dtype: este parámetro se refiere al tipo de datos del array devuelta.
  • count: este es un parámetro entero opcional y se refiere al número de elementos que se leerán en el objeto iterable. El valor predeterminado de este parámetro es -1, lo que significa que se leerán todos los elementos.
  • like: este es un parámetro booleano opcional. Controla la definición del array devuelta.

La forma de filtrar elementos usando el método fromiter() en NumPy es la siguiente.

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)

Producción :

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

Primero, inicializamos un array NumPy de la que deseamos filtrar los elementos. Luego iteramos sobre toda el array y filtramos los valores que son menores que 6. Luego, convertimos esta nueva matriz en un array NumPy con el mismo tipo de datos que el array original.

Para obtener más información sobre este método, consulte su documentación oficial

Filtrar elementos usando el método de corte de máscara booleana en NumPy

Este método es un poco extraño pero funciona de maravilla en NumPy. Tenemos que mencionar la condición dentro de los corchetes o corchetes [] después del array. Luego, NumPy filtrará los elementos según la condición y devolverá una nueva matriz filtrada.

Este concepto puede no ser claro e incluso parecer complicado para algunos, pero no se preocupe. Tenemos algunos ejemplos a continuación para explicarlo un poco mejor.

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)

Producción :

[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]

Como se mencionó anteriormente, agregamos algunas condiciones entre los corchetes y el array de destino se filtró en función de esas condiciones. La variable que almacena el array, que en este caso es myArray, representa un solo elemento del array dentro de los corchetes.

Para aplicar múltiples condiciones y usar operadores lógicos, usamos dos métodos NumPy, a saber, logical_and() y logical_or() para la lógica and o or respectivamente.

  • myArray < 6 - Filtra los valores inferiores a 6
  • myArray % 2 == 0 - Filtra los valores que son divisibles por 2
  • myArray % 2 != 0 - Filtra los valores que no son divisibles por 2
  • np.logical_and(myArray > 1, myArray < 5) - Filtra los valores mayores que uno y menores que cinco.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - Filtra los valores que son divisibles por dos o menos de cinco.

Filtrar elementos usando el método where() en NumPy

Aquí está el último método, que usa el método where() de la biblioteca NumPy. Filtra los elementos del array de destino en función de una condición y devuelve los índices de los elementos filtrados.

También puede utilizar este método para cambiar los valores de los elementos que satisfacen la condición.

La sintaxis del método where() se muestra a continuación.

where(condition, x, y)

Tiene los siguientes parámetros.

  • condition: es la condición booleana para la que se comprueba cada elemento del array.
  • x - Es un valor dado a los elementos que satisfacen la condición o un cálculo realizado sobre los elementos satisfactorios.
  • y - Es un valor dado a los elementos que no satisfacen la condición o un cálculo realizado sobre los elementos insatisfactorios.

Veamos cómo usar esta función para filtrar los 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)

Producción :

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

En el fragmento anterior, todos los elementos que satisfacen la condición se devolvieron como un array.

La función where() devuelve una tupla de matrices NumPy. Entonces solo consideramos la primera matriz, que es nuestra respuesta.

Como mencioné anteriormente, también puede asignar valores personalizados y realizar acciones personalizadas sobre elementos cuando satisfacen la condición especificada y cuando no.

A continuación se muestra un ejemplo de eso.

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)

Producción :

[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]

Eche un vistazo a la salida. Vea cómo los elementos están cambiando según las condiciones y según los valores y cálculos que proporcionó para manipular los elementos a la función 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.