Return a read-only view of the diagonal of a matrix (or stack of matrices).
For an M-by-N matrix A, the k-th diagonal is defined as
where k = 0 corresponds to the main diagonal, k > 0 corresponds to the super-diagonals (above the main diagonal), and k < 0 corresponds to the sub-diagonals (below the main diagonal). For example, given the matrix
the main diagonal is [ a_{0,0}, a_{1,1}, a_{2,2} ], the super-diagonal k = 1 is [ a_{0,1}, a_{1,2} ], and the sub-diagonal k = -1 is [ a_{1,0}, a_{2,1} ].
var diagonal = require( '@stdlib/ndarray/diagonal' );Returns a read-only view of the diagonal of a matrix (or stack of matrices).
var array = require( '@stdlib/ndarray/array' );
var x = array( [ [ 1.0, 2.0, 3.0 ], [ 4.0, 5.0, 6.0 ], [ 7.0, 8.0, 9.0 ] ] );
// returns <ndarray>[ [ 1.0, 2.0, 3.0 ], [ 4.0, 5.0, 6.0 ], [ 7.0, 8.0, 9.0 ] ]
var y = diagonal( x );
// returns <ndarray>[ 1.0, 5.0, 9.0 ]The function accepts the following arguments:
- x: input
ndarray. - options: function options.
The function accepts the following options:
- k: diagonal offset. The diagonal offset is interpreted as
column - row. Accordingly, whenk = 0, the function returns the main diagonal; whenk > 0, the function returns the diagonal above the main diagonal; and whenk < 0, the function returns the diagonal below the main diagonal. Default:0. - dims: dimension indices defining the plane from which to extract the diagonal. Must contain exactly two unique dimension indices. The first element specifies the row-like dimension. The second element specifies the column-like dimension. If a dimension index is provided as an integer less than zero, the dimension index is resolved relative to the last dimension, with the last dimension corresponding to the value
-1. Default:[-2, -1].
- The order of the dimension indices contained in
options.dimsmatters. The first element specifies the row-like dimension. The second element specifies the column-like dimension. - Each provided dimension index must reside on the interval
[-ndims, ndims-1].
var uniform = require( '@stdlib/random/uniform' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var diagonal = require( '@stdlib/ndarray/diagonal' );
// Create a stack of matrices:
var x = uniform( [ 2, 3, 3 ], -10.0, 10.0 );
console.log( ndarray2array( x ) );
// Extract the main diagonals from the stack:
var y = diagonal( x );
console.log( ndarray2array( y ) );
// Extract super-diagonals from the stack:
y = diagonal( x, {
'k': 1
});
console.log( ndarray2array( y ) );
// Extract sub-diagonals from the stack:
y = diagonal( x, {
'k': -1
});
console.log( ndarray2array( y ) );