Source code for toqito.matrix_props.is_diagonal

"""Checks if the matrix is a diagonal matrix."""

import numpy as np

from toqito.matrix_props import is_square


[docs] def is_diagonal(mat: np.ndarray) -> bool: r"""Determine if a matrix is diagonal [@WikiDiag]. A matrix is diagonal if the matrix is square and if the diagonal of the matrix is non-zero, while the off-diagonal elements are all zero. The following is an example of a 3-by-3 diagonal matrix: \[ \begin{equation} \begin{pmatrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 3 \end{pmatrix} \end{equation} \] This quick implementation is given by Daniel F. from StackOverflow in [@SO_43884189]. Examples: Consider the following diagonal matrix: \[ A = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}. \] Our function indicates that this is indeed a diagonal matrix: ```python exec="1" source="above" import numpy as np from toqito.matrix_props import is_diagonal A = np.array([[1, 0], [0, 1]]) print(is_diagonal(A)) ``` Alternatively, the following example matrix \[ B = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \] is not diagonal, as shown using `|toqito⟩`. ```python exec="1" source="above" import numpy as np from toqito.matrix_props import is_diagonal B = np.array([[1, 2], [3, 4]]) print(is_diagonal(B)) ``` Args: mat: The matrix to check. Returns: Returns `True` if the matrix is diagonal and `False` otherwise. """ if not is_square(mat): return False i, j = mat.shape test = mat.reshape(-1)[:-1].reshape(i - 1, j + 1) return bool(~np.any(test[:, 1:]))