maybeBroadcastArrays

Broadcast ndarrays to a common shape.

Usage

var maybeBroadcastArrays = require( '@stdlib/ndarray/maybe-broadcast-arrays' );

maybeBroadcastArrays( arrays )

Broadcasts 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 = maybeBroadcastArrays( [ x, y ] );
// returns [ <ndarray>, <ndarray> ]

The function supports two (mutually exclusive) means for providing ndarray arguments:

  1. providing a single array of ndarray arguments.
  2. providing ndarray arguments as separate arguments.
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 = maybeBroadcastArrays( x, y );
// returns [ <ndarray>, <ndarray> ]

Notes

  • The function throws an error if a provided broadcast-incompatible ndarrays.
  • If a provided ndarray has a shape matching the common shape, the function returns the provided ndarray.
  • If a provided ndarray has a different (broadcast compatible) shape than the common shape, the function returns a new read-only ndarray view of the provided ndarray's data. The 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 an input ndarray, copy the ndarray before broadcasting.

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 maybeBroadcastArrays = require( '@stdlib/ndarray/maybe-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 arrays to a common shape:
var out = maybeBroadcastArrays( [ x, y ] );
// returns <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 ) );
}
Did you find this page helpful?