Spec-Zone.ru › NumPy 1.21

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, необязательно

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

Возвращает
indicesndarray целых чисел

Массив индексов, имеющий ту же форму, что и 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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.digitize.html

Spec-Zone.ru

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