numpy.count_nonzero

numpy.count_nonzero(a, axis=None)

Функция count_nonzero() возвращает количество ненулевых элементов массива вдоль указанной оси.

Работа данной функции основана на встроенном методе __bool__() объектов языка Python, который проверяет их истинность. Отсюда следует, что функция count_nonzero() на самом деле способна работать не только с числами, но и любыми объектами, которые могут быть как истинными так и ложными. Например, пустой словарь - это False, непустой - True. И подсчет ведется только тех объектов, метод __bool__() которых возвращает True.

Параметры:
a - массив NumPy или подобный массиву объект.
Исходный массив.
axis - целое число (необязательный параметр).
Определяет ось вдоль которой выполняется подсчет ненулевых элементов. Если равен None (по умолчанию), то подсчет выполняется по сжатому до одной оси представлению исходного массива. Доступно в NumPy с версии 1.12.0.
Возвращает:
ndarray - массив NumPy
Массив с количеством ненулевых элементов вдоль указанной оси, если ось не указана, то возвращается их общее количество.
Смотрите так же:
argwhere, flatnonzero, nonzero


Примеры

>>> import numpy as np
>>> 
>>> #  Обеспечим вывод массивов целиком:
... np.set_printoptions(edgeitems = 15)
>>> 
>>> a = np.random.rand(6, 12)
>>> a = np.where(a > 0.80, 1, 0)
>>> a
array([[1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0],
       [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
>>> 
>>> np.count_nonzero(a)    #  общее количество ненулевых элементов
16
>>> 
>>> np.count_nonzero(a, axis = 0)     #  ... по столбцам
array([1, 1, 1, 2, 0, 2, 3, 1, 2, 2, 1, 0], dtype=int32)
>>> 
>>> np.count_nonzero(a, axis = 1)     #  ... по строкам
array([3, 3, 3, 4, 2, 1], dtype=int32)

Данная функция может работать не только с числами:

>>> a = np.array(['', 'k', '', '', 'l', '', 'm'])
>>> a
array(['', 'k', '', '', 'l', '', 'm'], dtype='<U1')
>>> 
>>> np.count_nonzero(a)
3
>>> 
>>> 
>>> a = np.array([{}, {}, {'a': 1}, {}, {'b': 2, 'c': 3}, {}])
>>> a
array([{}, {}, {'a': 1}, {}, {'c': 3, 'b': 2}, {}], dtype=object)
>>> 
>>> np.count_nonzero(a)
2