Spec-Zone.ru › NumPy 1.14

numpy.digitize

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

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

Каждый возвращаемый индекс i таков, что bins[i-1] <= x < bins[i] если bins монотонно возрастает, или bins[i-1] > x >= bins[i] если bins монотонно убывает. Если значения в x выходят за пределы bins, возвращается 0 или len(bins), соответственно. Если right равно True, то правая граница ячейки закрыта, так что индекс i таков, что bins[i-1] < x <= bins[i] или bins[i-1] >= x > bins[i] если bins монотонно возрастает или убывает соответственно.

Параметры:

x : array_like

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

bins : array_like

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

right : bool, необязательно

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

Возвращаемые значения:

out : ndarray целых чисел

Выходной массив индексов, имеющий ту же форму, что и x.

Исключения:

ValueError

Если bins не монотонный.

TypeError

Если тип входных данных — комплексный.

См. также

bincount, histogram, unique, searchsorted

Примечания

Если значения в x такие, что они выходят за пределы диапазона ячеек, попытка индексировать bins с индексами, которые возвращает digitize, приведет к IndexError.

Введено в версии 1.10.0.

np.digitize реализовано с использованием np.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.14.5/reference/generated/numpy.digitize.html

Spec-Zone.ru

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