numpy.digitize(x,bins,right=False)¶Return the indices of the bins to which each value in input array belongs.
| right | order of bins | returned indexi 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 inx are beyond the bounds ofbins, 0 orlen(bins) isreturned as appropriate.
| Parameters: |
|
|---|---|
| Returns: |
|
| Raises: |
|
See also
Notes
If values inx are such that they fall outside the bin range,attempting to indexbins with the indices thatdigitize returnswill result in an IndexError.
New in version 1.10.0.
np.digitize is implemented in terms ofnp.searchsorted. This meansthat a binary search is used to bin the values, which scales much betterfor larger number of bins than the previous linear search. It also removesthe 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.Thesearchsorted call is marginally faster, as it does not do anymonotonicity checks. Perhaps more importantly, it supports all dtypes.
Examples
>>>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)>>>indsarray([1, 4, 3, 2])>>>forninrange(x.size):...print(bins[inds[n]-1],"<=",x[n],"<",bins[inds[n]])...0.0 <= 0.2 < 1.04.0 <= 6.4 < 10.02.5 <= 3.0 < 4.01.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])