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.17.0/reference/generated/numpy.digitize.html