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
, указаные вещественные веса, то выходной массив будет так же состоять из вещественных чисел.
Примеры
Это яркий пример тех функций, пример работы которых, гораздо красноречивее, чем словесное описание:
>>> 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])