numpy.bincount

numpy.bincount(x, weights=None, minlength=0)

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

Данная функция выполняет подсчет только целых положительных чисел. Если на вход подан массив с числами типа float или complex, то будет вызвано исключение TypeError.

Параметры:
x - массив NumPy или подобный массиву объект.
Одномерная последовательность целых положительных чисел. В случае недопустимых значений параметра вызывается исключение ValueError.
weights - массив NumPy или подобный массиву объект (необязательный параметр).
Массив, который имеет ту же длину что и x, и, позволяет задать весовые коэфициенты каждого его элемента.
minlength - целое положительное число или 0 (необязательный параметр).
Позволяет задать минимальное значение длины выходного массива. Если указано недопустимое значение, то будет вызвано исключение ValueError.
Возвращает:
результат - массив NumPy
Массив положительных чисел, указывающих на количество вхождений значений его индекса в исходный массив. Длина выходного массива равна np.amax(x) + 1 Если в параметре weights, указаные вещественные веса, то выходной массив будет так же состоять из вещественных чисел.

Смотрите так же:
histogram, histogram2d, histogramdd, histogram_bin_edges, digitize


Примеры

Это яркий пример тех функций, пример работы которых, гораздо красноречивее, чем словесное описание:

>>> import numpy as np
>>> 
>>> x = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3]
>>> 
>>> np.bincount(x)
array([1, 2, 3, 4], dtype=int32)
>>> 
>>> y = [2, 2, 4, 4, 6, 6]
>>> 
>>> np.bincount(y)
array([0, 0, 2, 0, 2, 0, 2], dtype=int32)

Как видите индексы элементов выходного массива соответствуют значениям входного массива, а числа с этими индексами соответствуют количеству вхождений значений индекса во входном массиве.

В некоторых ситуациях бывает необходимо, что бы длина выходного массива имела фиксированное минимальное значение, которое позволяет задать параметр minlength:

>>> np.bincount(z)
array([5, 4], dtype=int32)
>>> 
>>> np.bincount(z, minlength = 10)
array([5, 4, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)

Если с помощью параметра weights заданы весовые коэфициенты, то вместо количества вхождений определенного элемента входного массива будет подсчитываться сумма его весовых коэфициентов, т.е. вместо out[n] += 1 будет выполняться out[n] += weight[i]:

>>> x = [0, 0, 1, 2, 2]
>>> w = [0.3, 0.4, 0.5, -0.1, -0.2]
>>> 
>>> np.bincount(x, weights = w)
array([ 0.7,  0.5, -0.3])