flopscope.numpy.linalg.trace
fnp.linalg.trace(x: 'ArrayLike', /, *, offset: 'int' = 0, dtype: 'Any' = None) -> 'FlopscopeArray'[flopscope source][numpy source]
Returns the sum along the specified diagonals of a matrix (or a stack of matrices) ``x``.
Adapted from NumPy docs np.linalg.trace
Matrix trace. Cost: n (sum of diagonal elements).
Returns the sum along the specified diagonals of a matrix (or a stack of matrices) x.
This function is Array API compatible, contrary to flops.trace.
Parameters
- x:(...,M,N) array_like
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.- dtype:dtype, optional
Data type of the returned array.
Returns
- out:ndarray
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] = trace(a[i, j, k, ..., l, :, :])The returned array must have a data type as described by the dtype parameter above.
See also
Examples
>>> flops.linalg.trace(flops.eye(3))
3.0
>>> a = flops.arange(8).reshape((2, 2, 2))
>>> flops.linalg.trace(a)
array([3, 11])Trace is computed with the last two axes as the 2-d sub-arrays. This behavior differs from flops.trace which uses the first two axes by default.
>>> a = flops.arange(24).reshape((3, 2, 2, 2))
>>> flops.linalg.trace(a).shape
(3, 2)Traces adjacent to the main diagonal can be obtained by using the
offset argument:
>>> a = flops.arange(9).reshape((3, 3)); a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> flops.linalg.trace(a, offset=1) # First superdiagonal
6
>>> flops.linalg.trace(a, offset=2) # Second superdiagonal
2
>>> flops.linalg.trace(a, offset=-1) # First subdiagonal
10
>>> flops.linalg.trace(a, offset=-2) # Second subdiagonal
6