Spec-Zone.ru › NumPy 2.0

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.

numpy.digitize реализована с использованием numpy.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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.digitize.html

Spec-Zone.ru

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