Spec-Zone.ru › NumPy 1.18

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–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.digitize.html

Spec-Zone.ru

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