numpy.digitize
-
numpy.digitize(x, bins, right=False) -
Возвращает индексы бинов, к которым принадлежит каждое значение в входном массиве.
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.15.4/reference/generated/numpy.digitize.html