A high-performance general-purpose compute library

Count non-zero values in an array, according to an array of keys. More...

Functions

AFAPI void countByKey (array &keys_out, array &vals_out, const array &keys, const array &vals, const int dim=-1)
 C++ Interface to count non-zero values in an array, according to an array of keys. More...
 
AFAPI af_err af_count_by_key (af_array *keys_out, af_array *vals_out, const af_array keys, const af_array vals, const int dim)
 C Interface to count non-zero values in an array, according to an array of keys. More...
 

Detailed Description

Count non-zero values in an array, according to an array of keys.

All non-zero values corresponding to each group of consecutive equal keys will be counted. Keys can repeat; however, only consecutive key values will be considered for each reduction. If a key value is repeated somewhere else in the keys array it will be considered the start of a new reduction. There are two outputs: the reduced set of consecutive keys and the corresponding final set of reduced values.

An example demonstrating the reduction behavior can be seen in the following snippet.

array keys(9, hkeys); // keys = [ 0 0 1 1 1 0 0 2 2 ]
array vals(9, hvals); // vals = [ 1 1 0 1 1 0 0 1 0 ];
array okeys, ovals;
countByKey(okeys, ovals, keys, vals);
// okeys = [ 0 1 0 2 ]
// ovals = [ 2 2 0 1 ]

The keys' input type must be integer (s32 or u32).

The output type is u32.

The keys array must be 1-dimenstional matching the size of the reduced dimension. An example of multi-dimensional reduce-by-key can be seen below:

array keys(5, hkeys);
array vals(2, 5, hvals);
// keys = [ 1 0 0 2 2 ]
// vals = [[ 1 1 1 0 1 ]
// [ 0 1 0 1 1 ]]
const int reduce_dim = 1;
array okeys, ovals;
countByKey(okeys, ovals, keys, vals, reduce_dim);
// okeys = [ 1 0 2 ]
// ovals = [[ 1 2 1 ],
// [ 0 1 2 ]]

Function Documentation

◆ af_count_by_key()

AFAPI af_err af_count_by_key ( af_array keys_out,
af_array vals_out,
const af_array  keys,
const af_array  vals,
const int  dim 
)

C Interface to count non-zero values in an array, according to an array of keys.

NaN values are treated as non-zero.

Parameters
[out]keys_outreduced keys
[out]vals_outcount
[in]keyskeys array
[in]valsinput array
[in]dimdimension along which the count occurs
Returns
AF_SUCCESS, if function returns successfully, else an af_err code is given

◆ countByKey()

AFAPI void countByKey ( array keys_out,
array vals_out,
const array keys,
const array vals,
const int  dim = -1 
)

C++ Interface to count non-zero values in an array, according to an array of keys.

NaN values are treated as non-zero.

Parameters
[out]keys_outreduced keys
[out]vals_outcount
[in]keyskeys array
[in]valsinput array
[in]dimdimension along which the count occurs, -1 denotes the first non-singleton dimension