broadcastArrays
Broadcast ndarrays to a common shape.
Usage
var broadcastArrays = require( '@stdlib/ndarray/base/broadcast-arrays' );
broadcastArrays( arrays )
Broadcasts a list of ndarrays to a common shape.
var array = require( '@stdlib/ndarray/array' );
var zeros = require( '@stdlib/ndarray/zeros' );
// Create a 2x2 ndarray:
var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
// Create a 2x2x2 ndarray:
var y = zeros( [ 2, 2, 2 ] );
// returns <ndarray>
// Broadcast to a common shape:
var out = broadcastArrays( [ x, y ] );
// returns [ <ndarray>, <ndarray> ]
Notes
- The function throws an error if provided broadcast-incompatible ndarrays.
- Returned ndarrays are views on their respective underlying data buffers. The views are 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 returned ndarray, copy the ndarray before performing operations which may mutate elements.
- Returned ndarrays are "base" ndarrays, and, thus, the returned ndarrays do not perform bounds checking or afford any of the guarantees of the non-base ndarray constructor. The primary intent of this function is to broadcast ndarray-like objects within internal implementations and to do so with minimal overhead.
- The function always returns new ndarray instances even if an input ndarray shape and the broadcasted shape are the same.
Examples
var array = require( '@stdlib/ndarray/array' );
var zeros = require( '@stdlib/ndarray/zeros' );
var numel = require( '@stdlib/ndarray/base/numel' );
var ind2sub = require( '@stdlib/ndarray/ind2sub' );
var broadcastArrays = require( '@stdlib/ndarray/base/broadcast-arrays' );
// Create a 2x2 array:
var x = array( [ [ 1, 2 ], [ 3, 4 ] ] );
// returns <ndarray>
// Create a 3x2x2 array:
var y = zeros( [ 3, 2, 2 ] );
// returns <ndarray>
// Broadcast the arrays to a common shape:
var out = broadcastArrays( [ x, y ] );
// returns [ <ndarray>, <ndarray> ]
// Retrieve the common shape:
var sh = out[ 0 ].shape;
// returns [ 3, 2, 2 ]
// Retrieve the number of elements:
var N = numel( sh );
// Loop through the array elements...
var i;
for ( i = 0; i < N; i++ ) {
console.log( 'X[%s] = %d', ind2sub( sh, i ).join( ', ' ), out[ 0 ].iget( i ) );
}