주 콘텐츠로 건너뛰기

양자 상태 플롯하기

패키지 버전

이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하길 권장해요.

qiskit[all]~=2.3.0

학습이나 디버깅과 같은 많은 상황에서 양자 컴퓨터의 상태를 시각화하는 것이 도움이 됩니다. 여기서는 시뮬레이션 또는 상태 단층 촬영을 통해 이미 특정 상태를 얻었다고 가정합니다. 소규모 양자 시스템의 상태만 볼 수 있습니다.

함수의 출력 사용하기

이 페이지의 모든 함수는 풍부한 객체를 반환합니다. 코드 셀의 마지막 줄에서 이러한 객체를 출력하면 Jupyter 노트북에서 셀 아래에 표시됩니다. 다른 환경이나 스크립트에서 이러한 함수를 호출하는 경우, 출력을 명시적으로 표시하거나 저장해야 합니다.

대부분의 함수는 이미지를 반환하며, 이는 matplotlib.Figure 객체입니다. 두 가지 옵션이 있습니다:

  • 반환된 객체에 .show()를 호출하여 새 창에서 이미지를 엽니다 (설정된 matplotlib Backend가 대화형인 경우).
  • .savefig("out.png")를 호출하여 현재 작업 디렉토리의 out.png에 그림을 저장합니다. savefig() 메서드는 경로를 받으므로 출력을 저장하는 위치와 파일명을 조정할 수 있습니다. 예를 들어, plot_state_city(psi).savefig("out.png")와 같이 사용합니다.

LaTeX 출력은 IPython.display.Latex 객체입니다. Jupyter가 아닌 환경에서의 가장 좋은 방법은 텍스트 표현을 위해 상태를 출력하거나, LaTeX 소스 문자열을 반환하는 latex_source 드로어로 전환하여 이 출력을 피하는 것입니다.

양자 상태는 밀도 행렬 ρ\rho (에르미트 행렬) 또는 상태 벡터 ψ|\psi\rangle (복소 벡터) 중 하나입니다. 밀도 행렬은 상태 벡터와 다음의 관계가 있습니다.

ρ=ψψ,\rho = |\psi\rangle\langle \psi|,

그리고 혼합 상태(상태 벡터의 양의 합)를 나타낼 수 있으므로 더 일반적입니다.

ρ=kpkψkψk.\rho = \sum_k p_k |\psi_k\rangle\langle \psi_k |.

Qiskit은 StatevectorDensityMatrix 클래스를 통해 양자 상태를 표현하고 많은 시각화 함수를 제공합니다. 다음 코드 셀 이후의 섹션을 참조하여 Qiskit의 다양한 시각화 함수가 다음 양자 상태를 어떻게 플롯하는지 확인하세요.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
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)

엄밀히 말해 "플롯"은 아니지만, Qiskit은 Jupyter 노트북에서 보기 좋게 표시되는 StatevectorDensityMatrix 객체의 LaTeX 표현을 렌더링할 수 있습니다. 이는 양자 상태를 표기하는 표준 수학 관례를 따릅니다. 양자 정보 기초: 단일 시스템에서 더 자세히 읽어보세요.

상태 벡터는 기본적으로 "켓 표기법"을 사용하며, 밀도 행렬은 2×2 행렬로 표시됩니다.

"latex""latex_source"로 대체하여 원시 LaTeX 문자열을 얻을 수도 있습니다.

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

2200+1201i211\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
[122402i424140i400002i4i4014] \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")

Output of the previous code cell

from qiskit.visualization import plot_state_hinton

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

Output of the previous code cell

from qiskit.visualization import plot_state_paulivec

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

Output of the previous code cell

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

Output of the previous code cell

from qiskit.visualization import plot_bloch_multivector

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

Output of the previous code cell

상태 플롯 함수의 옵션

모든 상태 플롯 함수는 다음 인수를 허용합니다 (Matplotlib 그림을 반환하지 않는 LaTeX 드로어와 figsize만 허용하는 plot_state_qsphere 제외):

  • title (str): 플롯 상단에 표시되는 플롯 제목 문자열
  • figsize (tuple): 인치 단위의 그림 크기 (너비, 높이)

plot_state_cityplot_state_paulivec 함수는 막대 색상을 지정하는 color 인수 (문자열 목록)도 허용합니다. 자세한 정보는 API 문서를 참조하세요.

Can't remember the name of the plotting function you need? Try asking Qiskit Code Assistant.

다음 단계

권장 사항
  • 양자 정보 지식을 새로 고침해야 하나요? IBM Quantum Learning의 양자 정보 기초 과정을 확인하세요.
  • 오픈 소스 Qiskit SDK에 기여하고 싶다면 기여 가이드라인을 읽어보세요.