Cuente ceros en NumPy Array
A veces, tenemos que contar elementos dentro de un array. Al contar, a veces asociamos una condición y contamos los elementos que la satisfacen. Puede ser una condición mayor que, una condición menor que, una condición igual, etc.
En este artículo, aprenderemos cómo contar ceros en un array NumPy de manera eficiente.
NumPy viene con todo tipo de métodos que podemos aplicar a arrays y matrices multidimensionales de NumPy. También tiene algunas funciones que podemos usar para contar ceros.
Este artículo discutirá dos de estos métodos, count_nonzero()
y where()
.
Cuente ceros en un array NumPy usando count_nonzero()
Como sugiere el nombre, este método cuenta los elementos distintos de cero. Usaremos esta función para contar ceros.
count_nonzero()
devuelve un valor entero o un array de valores enteros.
La sintaxis de count_nonzero()
está a continuación.
count_nonzero(a, axis, keepdims)
Tiene los siguientes parámetros.
a
- el array en la que la función contará cerosaxis
- Es un parámetro opcional, y se refiere al eje o tupla de ejes a lo largo del cual se contarán los elementos distintos de cero. El valor predeterminado de este parámetro esNone
, lo que significa que el recuento se realizará en un array plana.keepdims
: este es un parámetro booleano opcional. Por defecto, esFalse
. Si se establece enTrue
, los ejes contados se dejan en el resultado como dimensiones con tamaño 1.
Ahora, contemos ceros usando este método. Consulte el siguiente fragmento de código para conocer la primera forma.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")
Producción :
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
En el fragmento de código anterior, todo lo que hemos hecho es contar el número de elementos distintos de cero y luego restar el número de elementos distintos de cero del tamaño total del array o matriz.
Es posible que esta solución no sea el mejor uso de esta función, pero el siguiente sí lo es.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")
Producción :
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[False False True False False True False False True]
[[ True True False False]
[ True False True False]
[False True False True]
[False False True True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
El núcleo de esta solución es el principio de que cualquier cosa en informática que sea False
se puede representar como 0
y True
se puede representar como un valor distinto de cero.
La declaración myArray == 0
devuelve un array en la que todos los elementos que satisfacen la propiedad son True
y los que no son False
. Y la propia condición comprueba si un elemento es cero o no. Entonces, todos los elementos cero se convertirán en True
y ahora, tenemos que contarlos. Y para eso, usamos el método count_nonzero()
.
Aquí está el enlace a la documentación oficial de la función.
Cuente ceros en un array NumPy usando where()
La función where()
filtra los elementos de un array en función de una condición especificada y devuelve el array filtrada. Devuelve los índices de los elementos filtrados. Usando esta función, construiremos un array que solo tiene ceros, y la longitud de este nuevo array me dará la cuenta de ceros.
Ahora veamos la solución.
import numpy as np
myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")
Producción :
[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
[0 1 0 1]
[1 0 1 0]
[1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8
En el fragmento de código anterior, filtramos todos los elementos que eran cero. La función where()
devolvió los índices de esos elementos. Además, usamos esos índices para obtener los elementos originales. Obviamente, todos serán cero. Por último, contamos el número de esos ceros e imprimimos los recuentos.