Spec-Zone.ru › NumPy 1.16

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

Параметры:
x : array_like

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

bins : array_like

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

right : bool, optional

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

Возвращает:
indices : ndarray 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.digitize.html

Spec-Zone.ru

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