Spec-Zone.ru › NumPy 1.19

numpy.digitize

numpy.digitize(x, bins, right=False) [source]

Возвращает индексы ячеек, к которым принадлежит каждый элемент входного массива.

right

порядок ячеек

возвращённый индекс i удовлетворяет

False

возрастающий

bins[i-1] <= x < bins[i]

True

возрастающий

bins[i-1] < x <= bins[i]

False

убывающий

bins[i-1] > x >= bins[i]

True

убывающий

bins[i-1] >= x > bins[i]

Если значения в x выходят за пределы bins, возвращается 0 или len(bins), соответственно.

Parameters
xarray_like

Входной массив для категоризации. До NumPy 1.10.0, этот массив должен быть одномерным, но теперь может иметь любую форму.

binsarray_like

Массив ячеек. Он должен быть одномерным и монотонным.

rightbool, optional

Указывает, включает ли интервал правый или левый край ячейки. По умолчанию (right==False), что интервал не включает правый край. В этом случае левый край ячейки открыт, т. е. bins[i-1] <= x < bins[i] - это поведение по умолчанию для монотонно возрастающих ячеек.

Returns
indicesndarray of ints

Выходной массив индексов, имеющий ту же форму, что и x.

Raises
ValueError

Если bins не является монотонным.

TypeError

Если тип входных данных - комплексный.

См. также

bincount, histogram, unique, searchsorted

Примечания

Если значения в x такие, что они выходят за пределы диапазона ячеек, попытка индексировать bins с индексами, которые возвращает digitize, приведёт к IndexError.

Новое в версии 1.10.0.

np.digitize реализуется через np.searchsorted. Это означает, что для категоризации значений используется двоичный поиск, который масштабируется значительно лучше для большего числа ячеек, чем предыдущий линейный поиск. Также он отменяет требование к входному массиву быть одномерным.

Для монотонно _возрастающего_ bins, следующее эквивалентно:

np.digitize(x, bins, right=True)
np.searchsorted(bins, x, side='left')

Обратите внимание, что поскольку порядок аргументов меняется, сторона тоже должна измениться. Вызов searchsorted немного быстрее, так как он не выполняет никаких проверок монотонности. Возможно, что важнее, он поддерживает все типы данных.

Примеры

>>> x = np.array([0.2, 6.4, 3.0, 1.6])
>>> bins = np.array([0.0, 1.0, 2.5, 4.0, 10.0])
>>> inds = np.digitize(x, bins)
>>> inds
array([1, 4, 3, 2])
>>> for n in range(x.size):
...   print(bins[inds[n]-1], "<=", x[n], "<", bins[inds[n]])
...
0.0 <= 0.2 < 1.0
4.0 <= 6.4 < 10.0
2.5 <= 3.0 < 4.0
1.0 <= 1.6 < 2.5
>>> x = np.array([1.2, 10.0, 12.4, 15.5, 20.])
>>> bins = np.array([0, 5, 10, 15, 20])
>>> np.digitize(x,bins,right=True)
array([1, 2, 3, 4, 4])
>>> np.digitize(x,bins,right=False)
array([1, 3, 3, 4, 5])

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.digitize.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API