Spec-Zone.ru › NumPy 1.20

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) соответственно.

Параметры
xarray_like

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

binsarray_like

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

rightbool, optional

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

Возвращаемое значение
indicesndarray of ints

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

Исключения
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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.digitize.html

Spec-Zone.ru

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