Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Graficar estados cuánticos

Versiones de paquetes

El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o más recientes.

qiskit[all]~=2.5.2

En muchas situaciones — como al aprender o depurar — es útil visualizar el estado de un computador cuántico. Aquí asumimos que ya tienes un estado particular obtenido de una simulación o de tomografía de estados. Solo es posible ver los estados de sistemas cuánticos pequeños.

Usar la salida de las funciones

Todas las funciones de esta página devuelven objetos enriquecidos (con representación visual). Cuando la última línea de una celda de código produce estos objetos, los notebooks de Jupyter los muestran debajo de la celda. Si llamas estas funciones en otros entornos o en scripts, necesitarás mostrar o guardar las salidas explícitamente.

La mayoría de las funciones devuelven imágenes, que son objetos matplotlib.Figure. Dos opciones son:

  • Llamar .show() sobre el objeto devuelto para abrir la imagen en una ventana nueva (asumiendo que el backend de matplotlib que tienes configurado es interactivo).
  • Llamar .savefig("out.png") para guardar la figura en out.png en el directorio de trabajo actual. El método savefig() acepta una ruta, por lo que puedes ajustar la ubicación y el nombre del archivo donde guardas la salida. Por ejemplo, plot_state_city(psi).savefig("out.png").

Las salidas de LaTeX son objetos IPython.display.Latex. La mejor opción en un entorno que no sea Jupyter es evitar esta salida imprimiendo el estado para obtener una representación de texto, o cambiando al drawer latex_source para obtener una cadena de LaTeX sin procesar.

Un estado cuántico es una matriz de densidad ρ\rho (matriz hermítica) o un statevector ∣ψ⟩|\psi\rangle (vector complejo). La matriz de densidad se relaciona con el statevector mediante

ρ=∣ψ⟩⟨ψ∣,\rho = |\psi\rangle\langle \psi|,

y es más general, ya que puede representar estados mixtos (suma positiva de statevectors)

ρ=∑kpk∣ψk⟩⟨ψk∣.\rho = \sum_k p_k |\psi_k\rangle\langle \psi_k |.

Qiskit representa los estados cuánticos a través de las clases Statevector y DensityMatrix y proporciona muchas funciones de visualización. Consulta las secciones que aparecen después de la siguiente celda de código para ver cómo las distintas funciones de visualización de Qiskit grafican el siguiente estado cuántico.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from math import pi
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

# Create a Bell state for demonstration
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(pi / 2, 0, 1)
psi = Statevector(qc)

Aunque técnicamente no es una "gráfica", Qiskit puede renderizar representaciones en LaTeX de los objetos Statevector y DensityMatrix que se muestran de forma atractiva en los notebooks de Jupyter. Estas siguen las convenciones matemáticas estándar para escribir estados cuánticos. Lee más en Conceptos básicos de información cuántica: Sistemas individuales.

Los statevectors usan por defecto la "notación ket", mientras que las matrices de densidad se muestran como una matriz 2×2.

También puedes reemplazar "latex" con "latex_source" para obtener la cadena de LaTeX sin procesar.

psi.draw("latex") # psi is a Statevector object

22∣00⟩+12∣01⟩−i2∣11⟩\frac{\sqrt{2}}{2} |00\rangle+\frac{1}{2} |01\rangle- \frac{i}{2} |11\rangle

from qiskit.quantum_info import DensityMatrix

DensityMatrix(psi).draw("latex") # convert to a DensityMatrix and draw
[122402i424140i40000−2i4−i4014] \begin{bmatrix} \frac{1}{2} & \frac{\sqrt{2}}{4} & 0 & \frac{\sqrt{2} i}{4} \\ \frac{\sqrt{2}}{4} & \frac{1}{4} & 0 & \frac{i}{4} \\ 0 & 0 & 0 & 0 \\ - \frac{\sqrt{2} i}{4} & - \frac{i}{4} & 0 & \frac{1}{4} \\ \end{bmatrix}
from qiskit.visualization import plot_state_city

plot_state_city(psi)
# Alternative: psi.draw("city")

Salida de la celda de código anterior

from qiskit.visualization import plot_state_hinton

plot_state_hinton(psi)
# Alternative: psi.draw("hinton")

Salida de la celda de código anterior

from qiskit.visualization import plot_state_paulivec

plot_state_paulivec(psi)
# Alternative: psi.draw("paulivec")

Salida de la celda de código anterior

from qiskit.quantum_info import SparsePauliOp

SparsePauliOp.from_operator(psi)
SparsePauliOp(['II', 'IX', 'XY', 'YI', 'YX', 'YZ', 'ZI', 'ZX', 'ZZ'],
coeffs=[ 0.25 +0.j, 0.1767767+0.j, -0.1767767+0.j, -0.125 +0.j,
-0.1767767+0.j, 0.125 +0.j, 0.125 +0.j, 0.1767767+0.j,
0.125 +0.j])
from qiskit.visualization import plot_state_qsphere

plot_state_qsphere(psi)
# Alternative: psi.draw("qsphere")

Salida de la celda de código anterior

from qiskit.visualization import plot_bloch_multivector

plot_bloch_multivector(psi)
# Alternative: psi.draw("bloch")

Salida de la celda de código anterior

Opciones para las funciones de graficación de estados​

Todas las funciones de graficación de estados aceptan los siguientes argumentos (excepto el visualizador de LaTeX, que no devuelve una figura de Matplotlib, y plot_state_qsphere, que solo acepta figsize):

  • title (str): una cadena para el título de la gráfica, mostrada en la parte superior
  • figsize (tuple): tamaño de la figura en pulgadas (ancho, alto)

Las funciones plot_state_city y plot_state_paulivec también aceptan un argumento color (lista de cadenas) que especifica los colores de las barras. Consulta la documentación de la API para más información.

Próximos pasos​

Recomendaciones