Create a memoized multidimensional array constructor.
var ctor = require( '@stdlib/ndarray/memoized-ctor' );
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.
- Memoization can provide a performance boost when repeatedly creating
ndarray
constructors; however, because this function must account for arbitraryoption
combinations, constructor memoization can lead to significant memory usage and poor performance. If creating many specializedndarray
constructors (and especially constructors for generating arrays having many dimensions), you should forgo memoization. In general, this function works best when theoption
space is small.
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]}'