Source code for toqito.matrix_props.is_rank_one
"""Checks if a matrix has rank one."""
import numpy as np
[docs]
def is_rank_one(mat: np.ndarray, tol: float = 1e-08) -> bool:
r"""Determine whether the given matrix has rank one [@WikiMatrixRank].
The function evaluates the singular values (equivalently, eigenvalues for Hermitian matrices)
and counts how many are greater than the provided tolerance.
Examples:
Consider the Bell state density matrix \(\rho = \ket{\Phi^+}\bra{\Phi^+}\). This matrix
has rank one.
```python exec="1" source="above"
from toqito.matrix_props import is_rank_one
from toqito.states import bell
rho = bell(0) @ bell(0).conj().T
print(is_rank_one(rho))
```
On the other hand, the maximally mixed state is not rank one.
```python exec="1" source="above"
import numpy as np
from toqito.matrix_props import is_rank_one
maximally_mixed = np.eye(2) / 2
print(is_rank_one(maximally_mixed))
```
Args:
mat: Matrix to test.
tol: Numerical tolerance used when distinguishing non-zero singular values.
Returns:
`True` if the matrix has rank at most one, `False` otherwise.
"""
singular_values = np.linalg.svd(mat, compute_uv=False)
return np.count_nonzero(singular_values > tol) <= 1