Spec-Zone.ru › NumPy 1.10

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

Примечания

Если значения в 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])

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.digitize.html

Spec-Zone.ru

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