nditerInterleaveSubarrays
Create an iterator which iterates over interleaved subarrays.
Usage
var nditerInterleaveSubarrays = require( '@stdlib/ndarray/iter/interleave-subarrays' );
nditerInterleaveSubarrays( arr, ndims )
Returns an iterator which iterates over interleaved subarrays.
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 = nditerInterleaveSubarrays( [ x, x ], 2 );
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 [ [ 1, 2 ], [ 3, 4 ] ]
// ...
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
- All provided
ndarrays
must be broadcast compatible. - After broadcasting, each broadcasted input
ndarray
must have at leastndims+1
dimensions. - For input
ndarrays
supporting read-only views, the function returns read-only views of interleaved subarrays. As inputndarrays
may be broadcasted, a view is typically not contiguous. As more than one element of a returned view may refer to the same memory location, writing to a view may affect multiple elements. If you need to write to a subarray, copy the subarray before attempting mutation. - 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.
Examples
var array = require( '@stdlib/ndarray/array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var nditerInterleaveSubarrays = require( '@stdlib/ndarray/iter/interleave-subarrays' );
// Define input arrays:
var x = array( zeroTo( 27 ), {
'shape': [ 3, 3, 3 ]
});
var y = array( zeroTo( 9 ), {
'shape': [ 3, 3 ]
});
// Create an iterator for iterating over interleaved matrices:
var it = nditerInterleaveSubarrays( [ x, y ], 2 );
// Perform manual iteration...
var v;
while ( true ) {
v = it.next();
if ( v.done ) {
break;
}
console.log( ndarray2array( v.value ) );
}