nditerIndices

Create an iterator which returns indices for use indexing into an ndarray having a specified shape.

Usage

var nditerIndices = require( '@stdlib/ndarray/iter/indices' );

nditerIndices( shape[, options] )

Returns an iterator which returns indices for use indexing into an ndarray having a specified shape.

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

var x = array( [ [ [ 1, 2 ], [ 3, 4 ] ], [ [ 5, 6 ], [ 7, 8 ] ] ] );
// returns <ndarray>

var iter = nditerIndices( x.shape );

var v = iter.next().value;
// returns [ 0, 0, 0 ]

v = iter.next().value;
// returns [ 0, 0, 1 ]

v = iter.next().value;
// returns [ 0, 1, 0 ]

// ...

The function accepts the following options:

  • order: index iteration order. By default, the returned iterator iterates over the last dimensions first, thus corresponding to iteration over contiguous data stored in row-major order. Must be either 'row-major' or 'column-major'.

By default, the iterator returns indices such that the last dimensions are iterated over first. To return indices according to a specified order, set the order option.

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

var x = array( [ [ [ 1, 2 ], [ 3, 4 ] ], [ [ 5, 6 ], [ 7, 8 ] ] ], {
    'order': 'row-major'
});
// returns <ndarray>

var iter = nditerIndices( x.shape, {
    'order': 'column-major'
});

var v = iter.next().value;
// returns [ 0, 0, 0 ]

v = iter.next().value;
// returns [ 1, 0, 0 ]

v = iter.next().value;
// returns [ 0, 1, 0 ]

// ...

The returned iterator protocol-compliant object has the following properties:

  • next: function which returns an iterator protocol-compliant object containing the next iterated value (if one exists) assigned to a value property and a done property having a boolean value indicating whether the iterator is finished.
  • return: function which closes an iterator and returns a single (optional) argument in an iterator protocol-compliant object.

Notes

  • If an environment supports Symbol.iterator, the returned iterator is iterable.

Examples

var array = require( '@stdlib/ndarray/array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var nditerIndices = require( '@stdlib/ndarray/iter/indices' );

// Define an input array:
var x = array( zeroTo( 27 ), {
    'shape': [ 3, 3, 3 ]
});

// Create an iterator for generating indices:
var it = nditerIndices( x.shape );

// Perform manual iteration...
var v;
while ( true ) {
    v = it.next();
    if ( v.done ) {
        break;
    }
    console.log( x.get.apply( x, v.value ) );
}
Did you find this page helpful?