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