Calculate the differences between consecutive elements of a strided array.
var gediff = require( '@stdlib/blas/ext/base/gediff' );Calculates the differences between consecutive elements of a strided array.
var x = [ 2.0, 4.0, 6.0, 8.0, 10.0 ];
var p = [ 1.0 ];
var a = [ 11.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gediff( x.length, x, 1, 1, p, 1, 1, a, 1, out, 1 );
console.log( out );
// => [ 1.0, 2.0, 2.0, 2.0, 2.0, 11.0 ]The function has the following parameters:
- N: number of indexed elements.
- x: input array.
- strideX: stride length for
x. - N1: number of indexed elements to
prepend. - prepend: array containing values to prepend after computing differences.
- strideP: stride length for
prepend. - N2: number of indexed elements to
append. - append: array containing values to append after computing differences.
- strideA: stride length for
append. - out: output array. Must have
N + N1 + N2 - 1elements. - strideOut: stride length for
out.
The N and stride parameters determine which elements in the strided array are accessed at runtime. For example, to compute differences of every other element:
var x = [ 2.0, 4.0, 6.0, 8.0, 10.0 ];
var p = [ 1.0 ];
var a = [ 11.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0 ];
gediff( 3, x, 2, 1, p, 1, 1, a, 1, out, 1 );
console.log( out );
// => [ 1.0, 4.0, 4.0, 11.0 ]Note that indexing is relative to the first index. To introduce an offset, use typed array views.
var Float64Array = require( '@stdlib/array/float64' );
// Initial array...
var x0 = new Float64Array( [ 2.0, 4.0, 6.0, 8.0, 10.0 ] );
// Create an offset view...
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
var p = [ 1.0 ];
var a = [ 11.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0 ];
gediff( x1.length, x1, 1, 1, p, 1, 1, a, 1, out, 1 );
console.log( out );
// => [ 1.0, 2.0, 2.0, 2.0, 11.0 ]gediff.ndarray( N, x, strideX, offsetX, N1, prepend, strideP, offsetP, N2, append, strideA, offsetA, out, strideOut, offsetOut )
Calculates the differences between consecutive elements of a strided array using alternative indexing semantics.
var x = [ 2.0, 4.0, 6.0, 8.0, 10.0 ];
var p = [ 1.0 ];
var a = [ 11.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gediff.ndarray( x.length, x, 1, 0, 1, p, 1, 0, 1, a, 1, 0, out, 1, 0 );
console.log( out );
// => [ 1.0, 2.0, 2.0, 2.0, 2.0, 11.0 ]The function has the following additional parameters:
- offsetX: starting index for
x. - offsetP: starting index for
prepend. - offsetA: starting index for
append. - offsetOut: starting index for
out.
While typed array views mandate a view offset based on the underlying buffer, the offset parameter supports indexing semantics based on a starting index. For example, to access only the last three elements:
var x = [ 2.0, 4.0, 6.0, 8.0, 10.0 ];
var p = [ 1.0 ];
var a = [ 11.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0 ];
gediff.ndarray( 3, x, 1, x.length-3, 1, p, 1, 0, 1, a, 1, 0, out, 1, 0 );
console.log( out );
// => [ 1.0, 2.0, 2.0, 11.0 ]- If
N + N1 + N2 <= 1, both functions return the output array unchanged.
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var zeros = require( '@stdlib/array/zeros' );
var gediff = require( '@stdlib/blas/ext/base/gediff' );
var x = discreteUniform( 10, -100, 100, {
'dtype': 'generic'
});
console.log( 'Input array: ', x );
var p = discreteUniform( 2, -100, 100, {
'dtype': 'generic'
});
console.log( 'Prepend array: ', p );
var a = discreteUniform( 2, -100, 100, {
'dtype': 'generic'
});
console.log( 'Append array: ', a );
var out = zeros( 13 );
gediff( x.length, x, 1, 2, p, 1, 2, a, 1, out, 1 );
console.log( 'Output: ', out );