numpy.digitize

numpy.digitize(x, bins, right=False)

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

Параметры:
x - массив NumPy или подобный массиву объект.
Входные данные. Многомерные массивы сжимаются до одной оси.
bins - массив NumPy или подобный массиву объект.
Одномерный массив, соседние значения которого задают границы полуоткрытых интервалов. Значения должны быть возрастающими. Если значения массива x выходят за границы интервалов, то в зависимости от ситуации будет возвращен 0 или len(x).
right - True или False (необязательный параметр).

Указанные в параметре bins интервалы являются полуоткрытыми, а параметр right позволяет указать какой его край является включенным в него. right = False - не включает правое значение и включает левое; right = True - наоборот. Однако поведение для убывающих и возрастающих интервалов может отличаться:

  • если возрастающие интервалы и если right = False, то bins[i-1] <= x < bins[i];
  • если возрастающие интервалы и если right = True, то bins[i-1] < x <= bins[i];
  • если убывающие интервалы и если right = False, то bins[i-1] > x >= bins[i];
  • если убывающие интервалы и если right = True, то bins[i-1] >= x > bins[i].
Возвращает:
результат - массив NumPy
Массив индексов интервалов той же формы что и x.

Смотрите так же:
corrcoef, var

Примеры

>>> import numpy as np
>>> 
>>> bins = [0, 3, 5, 7, 9]
>>> 
>>> x = [2, 4, 6, 8]
>>> np.digitize(x, bins)
array([1, 2, 3, 4], dtype=int32)
>>> 
>>> y = [6, 8, 2, 4]
>>> np.digitize(y, bins)
array([3, 4, 1, 2], dtype=int32)
>>> 
>>> z = [8, 6, 4, 2]
>>> np.digitize(z, bins)
array([4, 3, 2, 1], dtype=int32)

Параметр right позволяет определить с какого конца интервалы являются полуоткрытыми:

>>> bins = [0, 2, 4, 6, 9]
>>> 
>>> x = [2, 4, 6]
>>> 
>>> np.digitize(x, bins, right = False)
array([2, 3, 4], dtype=int32)
>>> 
>>> np.digitize(x, bins, right = True)
array([1, 2, 3], dtype=int32)

Массив x может быть многомерным:

>>> bins = np.arange(0, 16, 3)
>>> bins
array([ 0,  3,  6,  9, 12, 15])
>>> 
>>> x = np.random.randint(15, size = (3, 3))
>>> x
array([[ 0,  6,  9],
       [ 4, 14,  1],
       [ 2,  3,  2]])
>>> 
>>> 
>>> np.digitize(x, bins)
array([[1, 3, 4],
       [2, 5, 1],
       [1, 2, 1]], dtype=int32)