$darkmode
A high-performance general-purpose compute library

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

Functions

AFAPI 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. More...
 
AFAPI 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. More...
 
AFAPI 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. More...
 
AFAPI 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. More...
 

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()

AFAPI 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()

AFAPI 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]

AFAPI void af::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

◆ productByKey() [2/2]

AFAPI void af::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