Memoized Constructor

Create a memoized multidimensional array constructor.

Usage

var ctor = require( '@stdlib/ndarray/memoized-ctor' );

ctor( dtype, ndims[, options] )

Returns a memoized multidimensional array constructor customized according to an underlying data type dtype and the number of array dimensions ndims.

var f1 = ctor( 'float64', 3 );
// returns <Function>

var f2 = ctor( 'float64', 3 );
// returns <Function>

var bool = ( f1 === f2 );
// returns true

The function accepts the same arguments and options as, and, with the exception of constructor caching, behaves identically to, @stdlib/ndarray/ctor.

Notes

  • Memoization can provide a performance boost when repeatedly creating ndarray constructors; however, because this function must account for arbitrary option combinations, constructor memoization can lead to significant memory usage and poor performance. If creating many specialized ndarray constructors (and especially constructors for generating arrays having many dimensions), you should forgo memoization. In general, this function works best when the option space is small.

Examples

var Float32Array = require( '@stdlib/array/float32' );
var ctor = require( '@stdlib/ndarray/memoized-ctor' );

// Create a memoized ndarray constructor for a 4-dimensional array containing single-precision floating-point numbers:
var ndarray = ctor( 'float32', 4 );

// Create a data buffer:
var buffer = new Float32Array( (3*3*3*3) + 100 );

// Specify the array shape:
var shape = [ 3, 3, 3, 3 ];

// Specify the array strides:
var strides = [ 27, 9, 3, 1 ];

// Specify the index offset:
var offset = 4;

// Specify the order:
var order = 'row-major'; // C-style

// Create a new ndarray:
var arr = ndarray( buffer, shape, strides, offset, order );

// Retrieve an array value:
var v = arr.get( 1, 2, 1, 2 );
// returns 0.0

// Set an array value:
arr.set( 1, 2, 1, 2, 10.0 );

// Retrieve the array value:
v = arr.get( 1, 2, 1, 2 );
// returns 10.0

// Serialize the array as a string:
var str = arr.toString();
// returns "ndarray( new Float32Array( [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ), [ 3, 3, 3, 3 ], [ 27, 9, 3, 1 ], 0, 'row-major' )"

// Serialize the array as JSON:
str = JSON.stringify( arr.toJSON() );
// returns '{"type":"ndarray","dtype":"float32","flags":{},"order":"row-major","shape":[3,3,3,3],"strides":[27,9,3,1],"data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}'