NumPy: Contar valores diferentes de cero con la función np.count_nonzero()

Publicado el 10 agosto 2021 por Daniel Rodríguez @analyticslane

Al trabajar con vectores muchas veces queremos contar cuántos valores cumplen una condición, para lo que en NumPy se puede recurrir a la función np.count_nonzero(). Una función que cuenta cuántos de los valores son diferentes de cero, o falso en el caso de matrices con valores booleanos, de una manera fácil.

La función np.count_nonzero()

En NumPy es posible encontrar la función np.count_nonzero() con la que se pueden contar los valores distintos de cero de una matriz. Esta función tiene la siguiente forma:

np.count_nonzero(arr, axis=None)

donde:

  • arr: representa la matriz en la que se desea buscar los valores que no son cero.
  • axis: indica el eje a lo largo del cual se desea contar los valores diferentes de cero. Los posibles valores para esta propiedad son los habituales:
    • None: contará el número total de valores en la matriz.
    • 0: realizar el recuento por columnas.
    • 1: realizar el recuento por filas.

Uso basico de np.count_nonzero()

El uso básico de np.count_nonzero() permite contar los valores que son diferentes de cero en un vector numérico. Para ver cómo usar esta función simplemente se puede crear un vector con ceros y ver el resultado.

import numpy as np

arr = np.array([5, 8, 9, 7, 0, 0, 9, 9, 0, 6])

np.count_nonzero(arr)
7

Obteniendo como resultados siete, el valor esperado. Además de con valores de tipo numérico, la función también admite vectores con valores booleanos, situación en la que contará los valores que son verdaderos. Dado que los valores falsos se consideran cero. Lo que se puede comprobar en el siguiente ejemplo.

boolean = np.array([False, False, True, False, False, False, True, True, False, False])

np.count_nonzero(boolean)
3

Lo que se puede utilizar para evaluar los valores de un vector que cumple una condición, al contar los valores verdaderos. Por ejemplo, se puede contar el número de valores positivos en el vector anterior simplemente usando la siguiente expresión.

np.count_nonzero(arr > 5)
6

Obteniendo seis como resultado.

Contar los valores diferente de cero en matrices

La función también se puede utilizar para contar el número de valores diferentes de cero en matrices. Por defecto contará el número total de valores, devolviendo un escalar con el resultado.

mat = np.array([[5, 8, 9], [7, 0, 0], [9, 9, 0]])

np.count_nonzero(mat)
6

Aunque, como es habitual en estas funciones, es posible cambiar el comportamiento a través de la propiedad axis. Asignando el valor cero para contar por columnas.

np.count_nonzero(mat, axis=0)
array([3, 2, 1])

Devolviendo en este caso un vector con los resultados para cada columna, Por otro lado, en el caso de asignar el valor uno contará las ocurrencias por filas.

np.count_nonzero(mat, axis=1)
array([3, 1, 2])

Conclusiones

En esta entrada hemos visto cómo se puede recurrir a la función np.count_nonzero() para contar los valores que son diferentes de cero. Una función con la que se puede saber cuántos valores cumple una condición ya que también trabaja con valores booleanos.