Spec-Zone.ru › NumPy 1.17

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

Spec-Zone.ru

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