ind

Return an index given an index mode.

Usage

var ind = require( '@stdlib/ndarray/base/ind' );

ind( idx, max, mode )

Returns an index given an index mode.

var idx = ind( 2, 9, 'throw' );
// returns 2

idx = ind( -1, 9, 'throw' );
// throws <RangeError>

idx = ind( 10, 9, 'throw' );
// throws <RangeError>

// Wrapping indices around using modulo arithmetic:
idx = ind( 2, 9, 'wrap' );
// returns 2

idx = ind( 10, 9, 'wrap' );
// returns 0

idx = ind( -1, 9, 'wrap' );
// returns 9

// Clamping indices to first and last indices:
idx = ind( 2, 9, 'clamp' );
// returns 2

idx = ind( 10, 9, 'clamp' );
// returns 9

idx = ind( -1, 9, 'clamp' );
// returns 0

// Normalizing negative indices:
idx = ind( 2, 9, 'normalize' );
// returns 2

idx = ind( -4, 9, 'normalize' );
// returns 6

ind.factory( mode )

Returns a function for returning an index according to a provided index mode.

var fcn = ind.factory( 'clamp' );

var idx = fcn( 2, 9 );
// returns 2

idx = fcn( 10, 9 );
// returns 9

idx = fcn( -1, 9 );
// returns 0

The function returns a function accepts the following arguments:

  • index: input index.
  • max: maximum index value.

Notes

  • Both functions support the following modes:

    • throw: specifies that the function should throw an error when an index is outside the interval [0, max].
    • normalize: specifies that the function should normalize negative indices and throw an error when an index is outside the interval [-max-1, max].
    • wrap: specifies that the function should wrap around an index using modulo arithmetic.
    • clamp: specifies that the function should set an index less than 0 to 0 (minimum index) and set an index greater than max to max.

Examples

var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var ind = require( '@stdlib/ndarray/base/ind' );

var modes;
var mode;
var idx;
var out;
var i;

modes = [ 'clamp', 'wrap' ];

for ( i = 0; i < 100; i++ ) {
    idx = discreteUniform( -20, 20 );
    mode = modes[ discreteUniform( 0, modes.length-1 ) ];
    out = ind( idx, 9, mode );
    console.log( '%d => %s(%d,%d) => %d', idx, mode, 0, 9, out );
}
Did you find this page helpful?