reduce2d
Reduce the number of dimensions by one of a two-dimensional nested array by applying a function against an accumulator and each element along the innermost dimension and returning the accumulation results as a one-dimensional array.
Usage
var reduce2d = require( '@stdlib/utils/reduce2d' );
reduce2d( arr, initial, fcn[, thisArg] )
Reduces the number of dimensions by one of a two-dimensional nested array by applying a function against an accumulator and each element along the innermost dimension and returning the accumulation results as a one-dimensional array.
var naryFunction = require( '@stdlib/utils/nary-function' );
var add = require( '@stdlib/math/base/ops/add' );
var arr = [
[ 1, 2, 3 ],
[ 4, 5, 6 ]
];
var out = reduce2d( arr, [ 0, 0 ], naryFunction( add, 2 ) );
// returns [ 6, 15 ]
The applied function is provided the following arguments:
- accumulator: accumulated value.
- value: array element.
- indices: current array element indices.
- arr: input array.
To set the this
context when invoking the input function, provide a thisArg
.
var add = require( '@stdlib/math/base/ops/add' );
function fcn( acc, v ) {
this.count += 1;
return add( acc, v );
}
var arr = [
[ 1, 2, 3 ],
[ 4, 5, 6 ]
];
var ctx = {
'count': 0
};
var out = reduce2d( arr, [ 0, 0 ], fcn, ctx );
// returns [ 6, 15 ]
var cnt = ctx.count;
// returns 6
Notes
- The function requires an array-like object containing an
initial
value for the accumulator for each reduction. The number ofinitial
values must equal the size of the outermost input array dimension.
Examples
var filledarrayBy = require( '@stdlib/array/filled-by' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory;
var naryFunction = require( '@stdlib/utils/nary-function' );
var add = require( '@stdlib/math/base/ops/add' );
var zeros = require( '@stdlib/array/base/zeros' );
var reduce2d = require( '@stdlib/utils/reduce2d' );
function fill( i ) {
var rand = discreteUniform( -10*(i+1), 10*(i+1) );
return filledarrayBy( 10, 'float64', rand );
}
// Create a nested array of arrays:
var x = filledarrayBy( 10, 'generic', fill );
// Create an explicit binary function:
var f = naryFunction( add, 2 );
// Compute the sums along the innermost dimension...
var y = reduce2d( x, zeros( x.length ), f );
console.log( 'x:' );
console.log( x );
console.log( 'y:' );
console.log( y );