flopscope.numpy.bincount
fnp.bincount(x, **kwargs)[flopscope source]
Count number of occurrences of each value in array of non-negative ints.
Adapted from NumPy docs np.bincount
Integer counting; cost = numel(x).
The number of bins (of size 1) is one larger than the largest value in
x. If minlength is specified, there will be at least this number
of bins in the output array (though it will be longer if necessary,
depending on the contents of x).
Each bin gives the number of occurrences of its index value in x.
If weights is specified the input array is weighted by it, i.e. if a
value n is found at position i, out[n] += weight[i] instead
of out[n] += 1.
Parameters
- x:array_like, 1 dimension, nonnegative ints
Input array.
- weights:array_like, optional
Weights, array of the same shape as
x.- minlength:int, optional
A minimum number of bins for the output array.
Returns
- out:ndarray of ints
The result of binning the input array. The length of
outis equal to flops.amax(x)+1.
Raises
- :ValueError
If the input is not 1-dimensional, or contains elements with negative values, or if
minlengthis negative.- :TypeError
If the type of the input is float or complex.
See also
Examples
>>> import flopscope.numpy as fnp
>>> flops.bincount(flops.arange(5))
array([1, 1, 1, 1, 1])
>>> flops.bincount(flops.array([0, 1, 1, 3, 2, 1, 7]))
array([1, 3, 1, 1, 0, 0, 0, 1])>>> x = flops.array([0, 1, 1, 3, 2, 1, 7, 23])
>>> flops.bincount(x).size == flops.amax(x)+1
TrueThe input array needs to be of integer dtype, otherwise a TypeError is raised:
>>> flops.bincount(flops.arange(5, dtype=float))
Traceback (most recent call last):
...
TypeError: Cannot cast array data from dtype('float64') to dtype('int64')
according to the rule 'safe'A possible use of bincount is to perform sums over
variable-size chunks of an array, using the weights keyword.
>>> w = flops.array([0.3, 0.5, 0.2, 0.7, 1., -0.6]) # weights
>>> x = flops.array([0, 1, 1, 2, 2, 2])
>>> flops.bincount(x, weights=w)
array([ 0.3, 0.7, 1.1])