nditerSelectDimension
Create an iterator which iterates over each view along a specified dimension.
Usage
var nditerSelectDimension = require( '@stdlib/ndarray/iter/select-dimension' );
nditerSelectDimension( x, dim[, options] )
Returns an iterator which iterates over each view along a specified dimension.
var array = require( '@stdlib/ndarray/array' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var x = array( [ [ [ 1, 2 ], [ 3, 4 ] ], [ [ 5, 6 ], [ 7, 8 ] ] ] );
// returns <ndarray>
var iter = nditerSelectDimension( x, 0 );
var v = iter.next().value;
// returns <ndarray>
var arr = ndarray2array( v );
// returns [ [ 1, 2 ], [ 3, 4 ] ]
v = iter.next().value;
// returns <ndarray>
arr = ndarray2array( v );
// returns [ [ 5, 6 ], [ 7, 8 ] ]
// ...
The function accepts the following options:
- readonly: boolean indicating whether returned
ndarrayviews should be read-only. In order to return writablendarrayviews, the inputndarraymust be writable. If the inputndarrayis read-only, setting this option tofalseraises an exception. Default:true. - keepdim: boolean indicating whether returned
ndarrayviews should include the selected dimension as a singleton dimension. Iftrue, each returned view has the same number of dimensions as the inputndarray. Otherwise, each returned view has one fewer dimensions than the inputndarray. Default:false.
By default, the iterator returns ndarray views which are read-only. To return writable views, set the readonly option to false.
var array = require( '@stdlib/ndarray/array' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var x = array( [ [ [ 1, 2 ], [ 3, 4 ] ], [ [ 5, 6 ], [ 7, 8 ] ] ] );
// returns <ndarray>
var iter = nditerSelectDimension( x, 0, {
'readonly': false
});
var v = iter.next().value;
// returns <ndarray>
var arr = ndarray2array( v );
// returns [ [ 1, 2 ], [ 3, 4 ] ]
v.set( 0, 0, 10 );
arr = ndarray2array( v );
// returns [ [ 10, 2 ], [ 3, 4 ] ]
By default, the iterator returns ndarray views which omit the selected dimension, resulting in ndarray views having one fewer dimensions than the provided input ndarray. To include the selected dimension as a singleton dimension in the returned ndarray views, set the keepdim option to true.
var array = require( '@stdlib/ndarray/array' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var x = array( [ [ [ 1, 2 ], [ 3, 4 ] ], [ [ 5, 6 ], [ 7, 8 ] ] ] );
// returns <ndarray>
var iter = nditerSelectDimension( x, 0, {
'keepdim': true
});
var v = iter.next().value;
// returns <ndarray>
var arr = ndarray2array( v );
// returns [ [ [ 1, 2 ], [ 3, 4 ] ] ]
v = iter.next().value;
// returns <ndarray>
arr = ndarray2array( v );
// returns [ [ [ 5, 6 ], [ 7, 8 ] ] ]
// ...
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
valueproperty and adoneproperty having abooleanvalue 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. - A returned iterator does not copy a provided
ndarray. To ensure iterable reproducibility, copy the inputndarraybefore creating an iterator. Otherwise, any changes to the contents of inputndarraywill be reflected in the returned iterator. - In environments supporting
Symbol.iterator, the function explicitly does not invoke an ndarray's@@iteratormethod, regardless of whether this method is defined. - Including the selected dimension as a singleton dimension can be useful when wanting to ensure that returned views remain broadcast compatible with the input
ndarray.
Examples
var array = require( '@stdlib/ndarray/array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var nditerSelectDimension = require( '@stdlib/ndarray/iter/select-dimension' );
// Define an input array:
var x = array( zeroTo( 27 ), {
'shape': [ 3, 3, 3 ]
});
// Create an iterator for iterating over matrices:
var it = nditerSelectDimension( x, 0 );
// Perform manual iteration...
var v;
while ( true ) {
v = it.next();
if ( v.done ) {
break;
}
console.log( ndarray2array( v.value ) );
}