numpy.digitize#
- 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 indexi satisfies
Falseincreasing
bins[i-1]<=x<bins[i]Trueincreasing
bins[i-1]<x<=bins[i]Falsedecreasing
bins[i-1]>x>=bins[i]Truedecreasing
bins[i-1]>=x>bins[i]If values inx are beyond the bounds ofbins, 0 or
len(bins)isreturned as appropriate.- Parameters:
- xarray_like
Input array to be binned. Prior to NumPy 1.10.0, this array had tobe 1-dimensional, but can now have any shape.
- binsarray_like
Array of bins. It has to be 1-dimensional and monotonic.
- rightbool, optional
Indicating whether the intervals include the right or the left binedge. Default behavior is (right==False) indicating that the intervaldoes not include the right edge. The left bin end is open in thiscase, i.e., bins[i-1] <= x < bins[i] is the default behavior formonotonically increasing bins.
- Returns:
- indicesndarray of ints
Output array of indices, of same shape asx.
- Raises:
- ValueError
Ifbins is not monotonic.
- TypeError
If the type of the input is complex.
See also
Notes
If values inx are such that they fall outside the bin range,attempting to indexbins with the indices that
digitizereturnswill result in an IndexError.New in version 1.10.0.
numpy.digitizeis implemented in terms ofnumpy.searchsorted.This means that a binary search is used to bin the values, which scalesmuch 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 monotonicallyincreasingbins, 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
searchsortedcall is marginally faster, as it does not do anymonotonicity checks. Perhaps more importantly, it supports all dtypes.Examples
>>>importnumpyasnp>>>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])