Compute the cumulative sum along one or more ndarray dimensions.
var cusum = require( '@stdlib/blas/ext/cusum' );Computes the cumulative sum along one or more ndarray dimensions.
var array = require( '@stdlib/ndarray/array' );
var x = array( [ -1.0, 2.0, -3.0 ] );
var y = cusum( x );
// returns <ndarray>[ -1.0, 1.0, -2.0 ]The function has the following parameters:
- x: input ndarray. Must have a numeric or "generic" data type.
- initial: initial value for the cumulative sum (optional). May be either a scalar value or an ndarray having a data type which promotes to the data type of the input ndarray. If provided a scalar value, the value is cast to the data type of the input ndarray. If provided an ndarray, the value must have a shape which is broadcast-compatible with the complement of the shape defined by
options.dims. For example, given the input shape[2, 3, 4]andoptions.dims=[0], an ndarray initial value must have a shape which is broadcast-compatible with the shape[3, 4]. Similarly, when performing the operation over all elements in a provided input ndarray, an ndarray initial value must be a zero-dimensional ndarray. By default, the initial value is the additive identity (i.e., zero). - options: function options (optional).
The function accepts the following options:
- dims: list of dimensions over which to perform operation. If not provided, the function performs the operation over all elements in a provided input ndarray.
- dtype: output ndarray data type. Must be a numeric or "generic" data type.
By default, the function uses the additive identity when computing the cumulative sum. To begin summing from a different value, provide an initial argument.
var array = require( '@stdlib/ndarray/array' );
var x = array( [ -1.0, 2.0, -3.0 ] );
var y = cusum( x, 10.0 );
// returns <ndarray>[ 9.0, 11.0, 8.0 ]By default, the function performs the operation over all elements in a provided input ndarray. To perform the operation over specific dimensions, provide a dims option.
var array = require( '@stdlib/ndarray/array' );
var x = array( [ -1.0, 2.0, -3.0, 4.0 ], {
'shape': [ 2, 2 ],
'order': 'row-major'
});
// returns <ndarray>[ [ -1.0, 2.0 ], [ -3.0, 4.0 ] ]
var y = cusum( x, {
'dims': [ 0 ]
});
// returns <ndarray>[ [ -1.0, 2.0 ], [ -4.0, 6.0 ] ]
y = cusum( x, {
'dims': [ 1 ]
});
// returns <ndarray>[ [ -1.0, 1.0 ], [ -3.0, 1.0 ] ]
y = cusum( x, {
'dims': [ 0, 1 ]
});
// returns <ndarray>[ [ -1.0, 1.0 ], [ -2.0, 2.0 ] ]By default, the function returns an ndarray having a data type determined by the function's output data type policy. To override the default behavior, set the dtype option.
var dtype = require( '@stdlib/ndarray/dtype' );
var array = require( '@stdlib/ndarray/array' );
var x = array( [ -1.0, 2.0, -3.0 ], {
'dtype': 'generic'
});
var y = cusum( x, {
'dtype': 'float64'
});
// returns <ndarray>
var dt = dtype( y );
// returns 'float64'Computes the cumulative sum along one or more ndarray dimensions and assigns results to a provided output ndarray.
var array = require( '@stdlib/ndarray/array' );
var zerosLike = require( '@stdlib/ndarray/zeros-like' );
var x = array( [ -1.0, 2.0, -3.0 ] );
var y = zerosLike( x );
var out = cusum.assign( x, y );
// returns <ndarray>[ -1.0, 1.0, -2.0 ]
var bool = ( out === y );
// returns trueThe method has the following parameters:
- x: input ndarray. Must have a numeric or generic data type.
- initial: initial value for the cumulative sum (optional). May be either a scalar value or an ndarray having a data type which promotes to the data type of the input ndarray. If provided a scalar value, the value is cast to the data type of the input ndarray. If provided an ndarray, the value must have a shape which is broadcast-compatible with the complement of the shape defined by
options.dims. For example, given the input shape[2, 3, 4]andoptions.dims=[0], an ndarray initial value must have a shape which is broadcast-compatible with the shape[3, 4]. Similarly, when performing the operation over all elements in a provided input ndarray, an ndarray initial value must be a zero-dimensional ndarray. By default, the initial value is the additive identity (i.e., zero). - out: output ndarray.
- options: function options (optional).
The method accepts the following options:
- dims: list of dimensions over which to perform operation. If not provided, the function performs the operation over all elements in a provided input ndarray.
- Both functions iterate over ndarray elements according to the memory layout of the input ndarray. Accordingly, performance degradation is possible when operating over multiple dimensions of a large non-contiguous multi-dimensional input ndarray. In such scenarios, one may want to copy an input ndarray to contiguous memory before computing the cumulative sum.
- The output data type policy only applies to the main function and specifies that, by default, in order to avoid issues arising from integer overflow, the function must return an ndarray having a data type amenable to accumulation. This means that, for integer data types having small value ranges (e.g.,
int8,uint8, etc), the main function returns an ndarray having at least a 32-bit integer data type. By default, if an input ndarray has a floating-point data type, the main function returns an ndarray having the same data type. For theassignmethod, the output ndarray is allowed to have any supported output data type.
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var getDType = require( '@stdlib/ndarray/dtype' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var ndarray = require( '@stdlib/ndarray/ctor' );
var cusum = require( '@stdlib/blas/ext/cusum' );
// Generate an array of random numbers:
var xbuf = discreteUniform( 25, 0, 20, {
'dtype': 'generic'
});
// Wrap in an ndarray:
var x = new ndarray( 'generic', xbuf, [ 5, 5 ], [ 5, 1 ], 0, 'row-major' );
console.log( ndarray2array( x ) );
// Perform operation:
var y = cusum( x, 100.0, {
'dims': [ 0 ]
});
// Resolve the output array data type:
var dt = getDType( y );
console.log( dt );
// Print the results:
console.log( ndarray2array( y ) );