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
-
Если тип входных данных — комплексный.
См. также
Примечания
Если значения в
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.16.1/reference/generated/numpy.digitize.html