Compute the Cartesian square for a strided array.
var gcartesianSquare = require( '@stdlib/blas/ext/base/gcartesian-square' );Computes the Cartesian square for a strided array.
var x = [ 1.0, 2.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gcartesianSquare( 'row-major', x.length, x, 1, out, 2 );
// out => [ 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 2.0 ]The function has the following parameters:
- order: storage layout. Must be either
'row-major'or'column-major'. - N: number of indexed elements.
- x: input
Arrayortyped array. - strideX: stride length for
x. - out: output
Arrayortyped array. - LDO: stride length between successive contiguous vectors of the matrix
out(a.k.a., leading dimension ofout).
The N and stride parameters determine which elements in the strided arrays are accessed at runtime. For example, to compute the Cartesian square of every other element:
var x = [ 1.0, 0.0, 2.0, 0.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gcartesianSquare( 'row-major', 2, x, 2, out, 2 );
// out => [ 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 2.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( [ 0.0, 1.0, 2.0, 3.0 ] );
// Create an offset view:
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
// Output array:
var out = new Float64Array( 8 );
gcartesianSquare( 'row-major', 2, x1, 1, out, 2 );
// out => <Float64Array>[ 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 2.0 ]Computes the Cartesian square for a strided array using alternative indexing semantics.
var x = [ 1.0, 2.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gcartesianSquare.ndarray( x.length, x, 1, 0, out, 2, 1, 0 );
// out => [ 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 2.0 ]The function has the following parameters:
- N: number of indexed elements.
- x: input
Arrayortyped array. - strideX: stride length for
x. - offsetX: starting index for
x. - out: output
Arrayortyped array. - strideOut1: stride length for the first dimension of
out. - strideOut2: stride length for the second dimension of
out. - offsetOut: starting index for
out.
While typed array views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to access only the last two elements:
var x = [ 0.0, 0.0, 1.0, 2.0 ];
var out = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ];
gcartesianSquare.ndarray( 2, x, 1, 2, out, 2, 1, 0 );
// out => [ 1.0, 1.0, 1.0, 2.0, 2.0, 1.0, 2.0, 2.0 ]- Pairs are stored as rows in the output matrix, where the first column contains the first element of each pair and the second column contains the second element.
- For an input array of length
N, the output array must contain at leastN * N * 2indexed elements. - For row-major order, the
LDOparameter must be greater than or equal to2. For column-major order, theLDOparameter must be greater than or equal tomax(1,N*N). - If
N <= 0, both functions returnoutunchanged. - Both functions support array-like objects having getter and setter accessors for array element access (e.g.,
@stdlib/array/base/accessor). - Depending on the environment, the typed versions (
dcartesianSquare,scartesianSquare, etc.) are likely to be significantly more performant.
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var zeros = require( '@stdlib/array/zeros' );
var gcartesianSquare = require( '@stdlib/blas/ext/base/gcartesian-square' );
var N = 2;
var x = discreteUniform( N, 1, 10, {
'dtype': 'generic'
});
console.log( x );
var out = zeros( N*N*2, 'generic' );
gcartesianSquare( 'row-major', N, x, 1, out, 2 );
console.log( out );