Skip to content

Latest commit

 

History

History
207 lines (142 loc) · 5.69 KB

File metadata and controls

207 lines (142 loc) · 5.69 KB

gindexOfColumn

Return the index of the first column in an input matrix which has the same elements as a provided search vector.

Usage

var gindexOfColumn = require( '@stdlib/blas/ext/base/gindex-of-column' );

gindexOfColumn( order, M, N, A, LDA, x, strideX )

Returns the index of the first column in an input matrix which has the same elements as a provided search vector.

/*
    A = [
        [ 1.0, 2.0 ],
        [ 3.0, 4.0 ],
        [ 0.0, 0.0 ]
    ]
*/
var A = [ 1.0, 2.0, 3.0, 4.0, 0.0, 0.0 ];

var x = [ 2.0, 4.0, 0.0 ];
var out = gindexOfColumn( 'row-major', 3, 2, A, 2, x, 1 );
// returns 1

The function has the following parameters:

  • order: storage layout.
  • M: number of rows in A.
  • N: number of columns in A.
  • A: input matrix as a linear array.
  • LDA: stride of the first dimension of A (a.k.a., leading dimension of the matrix A).
  • x: search vector.
  • strideX: stride length of x.

If the function is unable to find a matching column, the function returns -1.

var A = [ 1.0, 2.0, 3.0, 4.0, 0.0, 0.0 ];

var x = [ -2.0, -4.0, 0.0 ];
var out = gindexOfColumn( 'row-major', 3, 2, A, 2, x, 1 );
// returns -1

Note that indexing is relative to the first index. To introduce an offset, use typed array views.

var Float64Array = require( '@stdlib/array/float64' );

// Initial arrays:
var A0 = new Float64Array( [ 9999.0, 1.0, 2.0, 3.0, 4.0, 0.0, 0.0 ] );
var x0 = new Float64Array( [ 9999.0, 2.0, 4.0, 0.0 ] );

// Create offset views:
var A1 = new Float64Array( A0.buffer, A0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element

var out = gindexOfColumn( 'row-major', 3, 2, A1, 2, x1, 1 );
// returns 1

gindexOfColumn.ndarray( M, N, A, strideA1, strideA2, offsetA, x, strideX, offsetX )

Returns the index of the first column in an input matrix which has the same elements as a provided search vector using alternative indexing semantics.

/*
    A = [
        [ 1.0, 2.0 ],
        [ 3.0, 4.0 ],
        [ 0.0, 0.0 ]
    ]
*/
var A = [ 1.0, 2.0, 3.0, 4.0, 0.0, 0.0 ];

var x = [ 2.0, 4.0, 0.0 ];
var out = gindexOfColumn.ndarray( 3, 2, A, 2, 1, 0, x, 1, 0 );
// returns 1

The function has the following parameters:

  • M: number of rows in A.
  • N: number of columns in A.
  • A: input matrix as a linear array.
  • strideA1: stride of the first dimension of A.
  • strideA2: stride of the second dimension of A.
  • offsetA: starting index for A.
  • x: search vector.
  • strideX: stride length of x.
  • offsetX: starting index for x.

While typed array views mandate a view offset based on the underlying buffer, offset parameters support indexing semantics based on starting indices. For example,

/*
    A = [
        [ 1.0, 2.0 ],
        [ 3.0, 4.0 ],
        [ 0.0, 0.0 ]
    ]
*/
var A = [ 9999.0, 1.0, 2.0, 3.0, 4.0, 0.0, 0.0 ];

var x = [ 9999.0, 2.0, 4.0, 0.0 ];
var out = gindexOfColumn.ndarray( 3, 2, A, 2, 1, 1, x, 1, 1 );
// returns 1

Notes

  • When searching for a matching column, the function checks for equality using the strict equality operator ===. As a consequence, NaN values are considered distinct, and -0 and +0 are considered the same.
  • Both functions support array-like objects having getter and setter accessors for array element access (e.g., @stdlib/array/base/accessor).

Examples

var ndarray2array = require( '@stdlib/ndarray/base/to-array' );
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
var gindexOfColumn = require( '@stdlib/blas/ext/base/gindex-of-column' );

var shape = [ 3, 3 ];
var order = 'row-major';
var strides = shape2strides( shape, order );

var A = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ];
console.log( ndarray2array( A, shape, strides, 0, order ) );

var x = [ 2.0, 5.0, 8.0 ];
console.log( x );

var out = gindexOfColumn( order, shape[ 0 ], shape[ 1 ], A, strides[ 0 ], x, 1, 0 );
console.log( out );