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–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.digitize.html