Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

midrangeBy

Compute the mid-range along one or more ndarray dimensions according to a callback function.

The mid-range, or mid-extreme, is the arithmetic mean of the maximum and minimum values in a data set. The measure is the midpoint of the range and a measure of central tendency.

Usage

var midrangeBy = require( '@stdlib/stats/midrange-by' );

midrangeBy( x[, options], clbk[, thisArg] )

Computes the mid-range along one or more ndarray dimensions according to a callback function.

var array = require( '@stdlib/ndarray/array' );

var x = array( [ -1.0, 2.0, -3.0 ] );

function clbk( v ) {
    return v * 2.0;
}

var y = midrangeBy( x, clbk );
// returns <ndarray>[ -1.0 ]

The function has the following parameters:

  • x: input ndarray.
  • options: function options (optional).
  • clbk: callback function.
  • thisArg: callback function execution context (optional).

The invoked callback is provided three arguments:

  • value: current array element.
  • index: current array element index.
  • array: input ndarray.

To set the callback execution context, provide a thisArg.

var array = require( '@stdlib/ndarray/array' );

var x = array( [ -1.0, 2.0, -3.0 ] );

function clbk( v ) {
    this.count += 1;
    return v * 2.0;
}

var ctx = {
    'count': 0
};
var y = midrangeBy( x, clbk, ctx );
// returns <ndarray>[ -1.0 ]

var count = ctx.count;
// returns 3

The function accepts the following options:

  • dims: list of dimensions over which to perform a reduction. If not provided, the function performs a reduction over all elements in a provided input ndarray.
  • dtype: output ndarray data type. Must be a real-valued or "generic" data type.
  • keepdims: boolean indicating whether the reduced dimensions should be included in the returned ndarray as singleton dimensions. Default: false.

By default, the function performs a reduction over all elements in a provided input ndarray. To perform a reduction over specific dimensions, provide a dims option.

var array = require( '@stdlib/ndarray/array' );

function clbk( v ) {
    return v * 100.0;
}

var x = array( [ -1.0, 2.0, -3.0, 4.0 ], {
    'shape': [ 2, 2 ],
    'order': 'row-major'
});
// returns <ndarray>[ [ -1.0, 2.0 ], [ -3.0, 4.0 ] ]

var opts = {
    'dims': [ 0 ]
};
var y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ -200.0, 300.0 ]

opts = {
    'dims': [ 1 ]
};
y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ 50.0, 50.0 ]

opts = {
    'dims': [ 0, 1 ]
};
y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ 50.0 ]

By default, the function excludes reduced dimensions from the output ndarray. To include the reduced dimensions as singleton dimensions, set the keepdims option to true.

var array = require( '@stdlib/ndarray/array' );

function clbk( v ) {
    return v * 100.0;
}

var x = array( [ -1.0, 2.0, -3.0, 4.0 ], {
    'shape': [ 2, 2 ],
    'order': 'row-major'
});
// returns <ndarray>[ [ -1.0, 2.0 ], [ -3.0, 4.0 ] ]

var opts = {
    'dims': [ 0 ],
    'keepdims': true
};
var y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ [ -200.0, 300.0 ] ]

opts = {
    'dims': [ 1 ],
    'keepdims': true
};
y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ [ 50.0 ], [ 50.0 ] ]

opts = {
    'dims': [ 0, 1 ],
    'keepdims': true
};
y = midrangeBy( x, opts, clbk );
// returns <ndarray>[ [ 50.0 ] ]

By default, the function returns an ndarray having a data type determined by the function's output data type policy. To override the default behavior, set the dtype option.

var getDType = require( '@stdlib/ndarray/dtype' );
var array = require( '@stdlib/ndarray/array' );

function clbk( v ) {
    return v * 100.0;
}

var x = array( [ -1.0, 2.0, -3.0 ], {
    'dtype': 'generic'
});

var opts = {
    'dtype': 'float64'
};
var y = midrangeBy( x, opts, clbk );
// returns <ndarray>

var dt = String( getDType( y ) );
// returns 'float64'

midrangeBy.assign( x, out[, options], clbk[, thisArg] )

Computes the mid-range along one or more ndarray dimensions according to a callback function and assigns results to a provided output ndarray.

var array = require( '@stdlib/ndarray/array' );
var zeros = require( '@stdlib/ndarray/zeros' );

function clbk( v ) {
    return v * 100.0;
}

var x = array( [ -1.0, 2.0, -3.0 ] );
var y = zeros( [] );

var out = midrangeBy.assign( x, y, clbk );
// returns <ndarray>[ -50.0 ]

var bool = ( out === y );
// returns true

The method has the following parameters:

  • x: input ndarray.
  • out: output ndarray.
  • options: function options (optional).
  • clbk: callback function.
  • thisArg: callback execution context (optional).

The method accepts the following options:

  • dims: list of dimensions over which to perform a reduction. If not provided, the function performs a reduction over all elements in a provided input ndarray.

Notes

  • A provided callback function should return a numeric value.
  • If a provided callback function does not return any value (or equivalently, explicitly returns undefined), the value is ignored.
  • Setting the keepdims option to true can be useful when wanting to ensure that the output ndarray is broadcast-compatible with ndarrays having the same shape as the input ndarray.
  • The output data type policy only applies to the main function and specifies that, by default, the function must return an ndarray having a real-valued or "generic" data type. For the assign method, the output ndarray is allowed to have any supported output data type.

Examples

var filledarrayBy = require( '@stdlib/array/filled-by' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var getDType = require( '@stdlib/ndarray/dtype' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var ndarray = require( '@stdlib/ndarray/ctor' );
var midrangeBy = require( '@stdlib/stats/midrange-by' );

// Define a function for generating an object having a random value:
function random() {
    return {
        'value': discreteUniform( 0, 20 )
    };
}

// Generate an array of random objects:
var xbuf = filledarrayBy( 25, 'generic', random );

// Wrap in an ndarray:
var x = new ndarray( 'generic', xbuf, [ 5, 5 ], [ 5, 1 ], 0, 'row-major' );
console.log( ndarray2array( x ) );

// Define an accessor function:
function accessor( v ) {
    return v.value * 100;
}

// Perform a reduction:
var opts = {
    'dims': [ 0 ]
};
var y = midrangeBy( x, opts, accessor );

// Resolve the output array data type:
var dt = String( getDType( y ) );
console.log( dt );

// Print the results:
console.log( ndarray2array( y ) );