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
-
Если тип входных данных — комплексный.
См. также
Примечания
Если значения в
xтакие, что они выходят за пределы диапазона ячеек, попытка индексированияbinsс помощью индексов, которые возвращаетdigitize, приведет к ошибке IndexError.Введено в версии 1.10.0.
numpy.digitizeреализована с использованиемnumpy.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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.digitize.html