dpnp.linalg.trace

dpnp.linalg.trace(x, /, *, offset=0, dtype=None)[source]

Returns the sum along the specified diagonals of a matrix (or a stack of matrices) x.

This function is Array API compatible, contrary to dpnp.trace.

For full documentation refer to numpy.linalg.trace.

Parameters:
  • x ((...,M,N) {dpnp.ndarray, usm_ndarray}) -- Input array having shape (..., M, N) and whose innermost two dimensions form MxN matrices.

  • offset (int, optional) --

    Offset specifying the off-diagonal relative to the main diagonal, where:

    • offset = 0: the main diagonal.

    • offset > 0: off-diagonal above the main diagonal.

    • offset < 0: off-diagonal below the main diagonal.

    Default: 0.

  • dtype (dtype, optional) -- Determines the data-type of the returned array and of the accumulator where the elements are summed. If dtype has the value None and a is of integer type of precision less than the default integer precision, then the default integer precision is used. Otherwise, the precision is the same as that of a. Default: None.

Returns:

out -- An array containing the traces and whose shape is determined by removing the last two dimensions and storing the traces in the last array dimension. For example, if x has rank k and shape: (I, J, K, ..., L, M, N), then an output array has rank k-2 and shape: (I, J, K, ..., L) where: out[i, j, k, ..., l] = dpnp.linalg.trace(a[i, j, k, ..., l, :, :])

The returned array must have a data type as described by the dtype parameter above.

Return type:

dpnp.ndarray

See also

dpnp.trace

Similar function with support for more keyword arguments.

Examples

>>> import dpnp as np
>>> np.linalg.trace(np.eye(3))
array(3.)
>>> a = np.arange(8).reshape((2, 2, 2))
>>> np.linalg.trace(a)
array([3, 11])

Trace is computed with the last two axes as the 2-d sub-arrays. This behavior differs from dpnp.trace which uses the first two axes by default.

>>> a = np.arange(24).reshape((3, 2, 2, 2))
>>> np.linalg.trace(a).shape
(3, 2)

Traces adjacent to the main diagonal can be obtained by using the offset argument:

>>> a = np.arange(9).reshape((3, 3)); a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.linalg.trace(a, offset=1)  # First superdiagonal
array(6)
>>> np.linalg.trace(a, offset=2)  # Second superdiagonal
array(2)
>>> np.linalg.trace(a, offset=-1)  # First subdiagonal
array(10)
>>> np.linalg.trace(a, offset=-2)  # Second subdiagonal
array(6)