numpy.digitize(x, bins, right=False)
[source]
Return the indices of the bins to which each value in input array belongs.
right | order of bins | returned index i satisfies |
---|---|---|
False | increasing | bins[i-1] <= x < bins[i] |
True | increasing | bins[i-1] < x <= bins[i] |
False | decreasing | bins[i-1] > x >= bins[i] |
True | decreasing | bins[i-1] >= x > bins[i] |
If values in x
are beyond the bounds of bins
, 0 or len(bins)
is returned as appropriate.
Parameters: |
|
---|---|
Returns: |
|
Raises: |
|
See also
If values in x
are such that they fall outside the bin range, attempting to index bins
with the indices that digitize
returns will result in an IndexError.
New in version 1.10.0.
np.digitize
is implemented in terms of np.searchsorted
. This means that a binary search is used to bin the values, which scales much better for larger number of bins than the previous linear search. It also removes the requirement for the input array to be 1-dimensional.
For monotonically _increasing_ bins
, the following are equivalent:
np.digitize(x, bins, right=True) np.searchsorted(bins, x, side='left')
Note that as the order of the arguments are reversed, the side must be too. The searchsorted
call is marginally faster, as it does not do any monotonicity checks. Perhaps more importantly, it supports all dtypes.
>>> 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