Spec-Zone.ru › NumPy 1.15

numpy.digitize

numpy.digitize(x, bins, right=False)

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

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.15.4/reference/generated/numpy.digitize.html

Spec-Zone.ru

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