Skip to content

is_diagonal

Checks if the matrix is a diagonal matrix.

is_diagonal

is_diagonal(mat: ndarray) -> bool

Determine if a matrix is diagonal 1.

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.

This quick implementation is given by Daniel F. from StackOverflow in 2.

Parameters:

  • mat (ndarray) –

    The matrix to check.

Returns:

  • bool

    Returns True if the matrix is diagonal and False otherwise.

Examples:

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} \]

Consider the following diagonal matrix:

\[ A = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}. \]

Our function indicates that this is indeed a diagonal matrix:

import numpy as np
from toqito.matrix_props import is_diagonal

A = np.array([[1, 0], [0, 1]])

print(is_diagonal(A))
True

Alternatively, the following example matrix

\[ B = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \]

is not diagonal, as shown using |toqito⟩.

import numpy as np
from toqito.matrix_props import is_diagonal

B = np.array([[1, 2], [3, 4]])

print(is_diagonal(B))
False

References

1 Wikipedia. Diagonal matrix. link.
2 Post, Stack. Check if a large matrix is diagonal matrix in python. link.

Source code in toqito/matrix_props/is_diagonal.py
def is_diagonal(mat: np.ndarray) -> bool:
    r"""Determine if a matrix is diagonal [@wikipediadiagonal].

    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.

    This quick implementation is given by Daniel F. from StackOverflow in [@so43884189].

    Args:
        mat: The matrix to check.

    Returns:
        Returns `True` if the matrix is diagonal and `False` otherwise.

    Examples:
        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}
        \]

        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" result="text"
        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" result="text"
        import numpy as np
        from toqito.matrix_props import is_diagonal

        B = np.array([[1, 2], [3, 4]])

        print(is_diagonal(B))
        ```

    """
    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:]))