numpy.digitize
-
numpy.digitize(x, bins, right=False) -
Возвращает индексы ячеек, к которым принадлежит каждое значение в массиве входных данных.
Каждый индекс
iвозвращается таким образом, чтоbins[i-1] <= x < bins[i]еслиbinsмонотонно возрастает, илиbins[i-1] > x >= bins[i]еслиbinsмонотонно убывает. Если значения вxвыходят за пределыbins, возвращается 0 илиlen(bins), соответственно. Если right равно True, то правая граница ячейки закрыта, так что индексiтаков, чтоbins[i-1] < x <= bins[i]или bins[i-1] >= x > bins[i]`` еслиbinsмонотонно возрастает или убывает, соответственно.Параметры: x : array_like
Массив входных данных, подлежащий распределению по ячейкам. До версии NumPy 1.10.0 этот массив должен был быть одномерным, но теперь может иметь любую форму.
bins : array_like
Массив ячеек. Он должен быть одномерным и монотонным.
right : bool, необязательно
Указывает, включают ли интервалы правую или левую границу ячейки. По умолчанию (right==False), интервал не включает правую границу. Левая граница ячейки в этом случае открыта, т.е. bins[i-1] <= x < bins[i] — это поведение по умолчанию для монотонно возрастающих ячеек.
Возвращает: out : ndarray целых чисел
Массив выходных индексов, с той же формой, что и
x.Исключения: ValueError
Если
binsне является монотонным.TypeError
Если тип входных данных — комплексный.
Примечания
Если значения в
xтаковы, что они выходят за пределы диапазона ячеек, попытка индексированияbinsс индексами, которые возвращаетdigitize, приведет к IndexError.Новое в версии 1.10.0.
np.digitizeреализовано черезnp.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])
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.digitize.html