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, необязательно
-
Указывает, включают ли интервалы правую или левую границу ячейки. По умолчанию (right==False), интервал не включает правую границу. Левая граница ячейки открыта в этом случае, т.е. bins[i-1] <= x < bins[i] — это поведение по умолчанию для монотонно возрастающих ячеек.
- Возвращает
-
- indicesndarray целых чисел
-
Массив индексов, имеющий ту же форму, что и
x.
- Возбуждает
-
- ValueError
-
Если
binsне является монотонным. - TypeError
-
Если тип входных данных — комплексный.
См. также
Примечания
Если значения в
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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.digitize.html