numpy.digitize
numpy.digitize(x, bins, right=False)
Функция 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
.
Примеры
>>> 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)