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