map4d

Apply a function to each nested element in a four-dimensional nested array and assign the result to a nested element in a new four-dimensional nested array.

Usage

var map4d = require( '@stdlib/utils/map4d' );

map4d( arr, fcn[, thisArg] )

Applies a function to each nested element in a four-dimensional nested array and assigns the result to a nested element in a new four-dimensional nested array.

var naryFunction = require( '@stdlib/utils/nary-function' );
var abs = require( '@stdlib/math/base/special/abs' );

var arr = [
    [ [ [ -1, -2, -3 ] ] ],
    [ [ [ -4, -5, -6 ] ] ]
];

var out = map4d( arr, naryFunction( abs, 1 ) );
// returns [ [ [ [ 1, 2, 3 ] ] ], [ [ [ 4, 5, 6 ] ] ] ]

The applied function is provided the following arguments:

  • 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 abs = require( '@stdlib/math/base/special/abs' );

function fcn( v ) {
    this.count += 1;
    return abs( v );
}

var arr = [
    [ [ [ -1, -2, -3 ] ] ],
    [ [ [ -4, -5, -6 ] ] ]
];

var ctx = {
    'count': 0
};

var out = map4d( arr, fcn, ctx );
// returns [ [ [ [ 1, 2, 3 ] ] ], [ [ [ 4, 5, 6 ] ] ] ]

var cnt = ctx.count;
// returns 6

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 abs2 = require( '@stdlib/math/base/special/abs2' );
var map4d = require( '@stdlib/utils/map4d' );

function fill( n ) {
    if ( n > 0 ) {
        return array;
    }
    return values;

    function array() {
        return filledarrayBy( 2, 'generic', fill( n-1 ) );
    }

    function values( i ) {
        var rand = discreteUniform( -10*(i+1), 10*(i+1) );
        return filledarrayBy( 10, 'generic', rand );
    }
}

// Create a four-dimensional nested array:
var x = filledarrayBy( 2, 'generic', fill( 2 ) );

// Create an explicit unary function:
var f = naryFunction( abs2, 1 );

// Compute the element-wise squared absolute value...
var y = map4d( x, f );

console.log( 'x:' );
console.log( JSON.stringify( x, null, '  ' ) );

console.log( 'y:' );
console.log( JSON.stringify( y, null, '  ' ) );
Did you find this page helpful?