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/number/float64/base/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/number/float64/base/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
initialvalue for the accumulator for each reduction. The number ofinitialvalues 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/number/float64/base/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 );
See Also
@stdlib/utils/map2d: apply a function to each nested element in an array of arrays and assign the result to a nested element in a new array of arrays.@stdlib/utils/reduce: apply a function against an accumulator and each element in an array and return the accumulated result.