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
ndarray
views should be read-only. In order to return writablendarray
views, the inputndarray
must be writable. If the inputndarray
is read-only, setting this option tofalse
raises an exception. Default:true
. - keepdim: boolean indicating whether returned
ndarray
views 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
value
property and adone
property having aboolean
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. - A returned iterator does not copy a provided
ndarray
. To ensure iterable reproducibility, copy the inputndarray
before creating an iterator. Otherwise, any changes to the contents of inputndarray
will be reflected in the returned iterator. - In environments supporting
Symbol.iterator
, the function explicitly does not invoke an ndarray's@@iterator
method, 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 ) );
}