A high-performance general-purpose compute library

Functions

void productByKey (array &keys_out, array &vals_out, const array &keys, const array &vals, const int dim=-1)
 C++ Interface to multiply array elements over a given dimension, according to an array of keys.
 
void productByKey (array &keys_out, array &vals_out, const array &keys, const array &vals, const int dim, const double nanval)
 C++ Interface to multiply array elements over a given dimension, replacing any NaNs with a specified value, according to an array of keys.
 
af_err af_product_by_key (af_array *keys_out, af_array *vals_out, const af_array keys, const af_array vals, const int dim)
 C Interface to multiply array elements over a given dimension, according to an array of keys.
 
af_err af_product_by_key_nan (af_array *keys_out, af_array *vals_out, const af_array keys, const af_array vals, const int dim, const double nanval)
 C Interface to multiply array elements over a given dimension, replacing any NaNs with a specified value, according to an array of keys.
 

Detailed Description

Multiply array elements over a given dimension, according to an array of keys.

The values corresponding to each group of consecutive equal keys will be multiplied together. 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 2 3 4 5 6 7 8 9 ];
array okeys, ovals;
productByKey(okeys, ovals, keys, vals);
// okeys = [ 0 1 0 2 ]
// ovals = [ 2 60 42 72 ]

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

This table defines output types for corresponding input types:

Input Type Output Type
f32, f64, c32, c64 same as input
s32, u32, s64, u64 same as input
s16 s32
u16, u8, b8 u32
f16 f32

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 2 3 4 5 ]
// [ 6 7 8 9 10 ]]
const int reduce_dim = 1;
array okeys, ovals;
productByKey(okeys, ovals, keys, vals, reduce_dim);
// okeys = [ 1 0 2 ]
// ovals = [[ 1 6 20 ],
// [ 6 56 90 ]]

Function Documentation

◆ af_product_by_key()

af_err af_product_by_key ( af_array * keys_out,
af_array * vals_out,
const af_array keys,
const af_array vals,
const int dim )

C Interface to multiply array elements over a given dimension, according to an array of keys.

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

◆ af_product_by_key_nan()

af_err af_product_by_key_nan ( af_array * keys_out,
af_array * vals_out,
const af_array keys,
const af_array vals,
const int dim,
const double nanval )

C Interface to multiply array elements over a given dimension, replacing any NaNs with a specified value, according to an array of keys.

Parameters
[out]keys_outreduced keys
[out]vals_outproduct
[in]keyskeys array
[in]valsinput array
[in]dimdimension along which the product occurs
[in]nanvalvalue that replaces NaNs
Returns
AF_SUCCESS, if function returns successfully, else an af_err code is given

◆ productByKey() [1/2]

void productByKey ( array & keys_out,
array & vals_out,
const array & keys,
const array & vals,
const int dim,
const double nanval )

C++ Interface to multiply array elements over a given dimension, replacing any NaNs with a specified value, according to an array of keys.

Parameters
[out]keys_outreduced keys
[out]vals_outproduct
[in]keyskeys array
[in]valsinput array
[in]dimdimension along which the product occurs
[in]nanvalvalue that replaces NaNs

◆ productByKey() [2/2]

void productByKey ( array & keys_out,
array & vals_out,
const array & keys,
const array & vals,
const int dim = -1 )

C++ Interface to multiply array elements over a given dimension, according to an array of keys.

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