nextCartesianIndex
Return the next Cartesian index (i.e., set of subscripts/dimension indices).
Usage
var nextCartesianIndex = require( '@stdlib/ndarray/base/next-cartesian-index' );
nextCartesianIndex( shape, order, idx, dim )
Returns the next Cartesian index (i.e., set of subscripts/dimension indices).
var idx = nextCartesianIndex( [ 2, 2, 2 ], 'row-major', [ 0, 0, 1 ], -1 );
// returns [ 0, 1, 0 ]
The function accepts the following arguments:
- shape: array shape.
- order: index iteration order. Must be either
row-major
(C-style) orcolumn-major
(Fortran-style). - idx: current dimension indices.
- dim: index of the dimension from which to start incrementing (inclusive).
The order
parameter specifies the index iteration order. When order
is row-major
, the last indices change fastest, and, when the order
is column-major
, the first indices change fastest.
var idx = nextCartesianIndex( [ 2, 2, 2 ], 'column-major', [ 0, 1, 0 ], 0 );
// returns [ 1, 1, 0 ]
The dim
parameter controls which dimensions are incremented. When order
is row-major
, if dim
equals shape.length-1
(or equivalently -1
), the function increments over all dimensions from right-to-left (last-to-first). Similarly, when order
is column-major
, if dim
equals 0
, the function increments over all dimensions from left-to-right (first-to-last). To restrict which dimensions can be incremented, set dim
to a value other than the respective end. For example,
// Increment starting from the second-to-last dimension:
var idx = nextCartesianIndex( [ 2, 2, 2 ], 'row-major', [ 0, 0, 0 ], -2 );
// returns [ 0, 1, 0 ]
idx = nextCartesianIndex( [ 2, 2, 2 ], 'row-major', idx, -2 );
// returns [ 1, 0, 0 ]
idx = nextCartesianIndex( [ 2, 2, 2 ], 'row-major', idx, -2 );
// returns [ 1, 1, 0 ]
nextCartesianIndex.assign( shape, order, idx, dim, out )
Returns the next Cartesian index (i.e., set of subscripts/dimension indices) and assigns results to a provided output array.
var out = [ 0, 0, 0 ];
var idx = nextCartesianIndex.assign( [ 2, 2, 2 ], 'row-major', [ 0, 0, 1 ], -1, out );
// returns [ 0, 1, 0 ]
var bool = ( out === idx );
// returns true
The function accepts the following arguments:
- shape: array shape.
- order: index iteration order. Must be either
row-major
(C-style) orcolumn-major
(Fortran-style). - idx: current dimension indices.
- dim: index of the dimension from which to start incrementing (inclusive).
- out: output array.
Notes
- The function does not check whether the current index is the "last" index. Instead, if the function is provided dimension indices corresponding to the last element, the function will cycle back to the "first" index.
- If provided an empty shape (i.e., a shape corresponding to a zero-dimensional ndarray) or a dimension index
dim
which is out-of-bounds, the function returnsnull
.
Examples
var array = require( '@stdlib/ndarray/array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var nextCartesianIndex = require( '@stdlib/ndarray/base/next-cartesian-index' );
// Create an ndarray:
var x = array( zeroTo( 27 ), {
'shape': [ 3, 3, 3 ]
});
// Initialize a set of indices:
var idx = [ 0, 0, 0 ];
// Iterate over each element in the array...
var i;
for ( i = 0; i < x.length; i++ ) {
console.log( 'x[%s] = %d', idx.join( ',' ), x.get.apply( x, idx ) );
idx = nextCartesianIndex.assign( x.shape, x.order, idx, -1, idx );
}