Consideremos el experimento de lanzar una moneda no trucada, y ocultar su resultado. Este experimento se corresponde con una distribución de probabilidad Bernoulli con parámetro $p= 1/2$. La matriz de densidad de probabilidad asociada a este experimento está dada por \begin{align*} \rho_X = \biggl[\begin{matrix}1/2 & 0\\ 0 & 1/2\end{matrix}\biggr]. \end{align*}
import numpy as np
# Define the probability density matrix:
rho_X = np.array([[1/2, 0], [0, 1/2]])
print("rho_X =\n", str(rho_X))
rho_X = [[0.5 0. ] [0. 0.5]]
Este es un estado mixto, ya que $\rho_X$ tiene rango $2 > 1$, y clásico, al ser $\rho_X$ una matriz diagonal.
# Verify the rank of rho_X
rango = np.linalg.matrix_rank(rho_X)
print("rango = ", rango)
# Check if rho_X is a diagonal matrix
if np.all(np.diag(np.diag(rho_X)) == rho_X):
print('matriz diagonal')
else:
print('matriz no diagonal')
rango = 2 matriz diagonal