양자 상태 플롯하기
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하길 권장해요.
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 드로어로 전환하여 이 출력을 피하는 것입니다.
양자 상태는 밀도 행렬 (에르미트 행렬) 또는 상태 벡터 (복소 벡터) 중 하나입니다. 밀도 행렬은 상태 벡터와 다음의 관계가 있습니다.
그리고 혼합 상태(상태 벡터의 양의 합)를 나타낼 수 있으므로 더 일반적입니다.
Qiskit은 Statevector 및 DensityMatrix 클래스를 통해 양자 상태를 표현하고 많은 시각화 함수를 제공합니다. 다음 코드 셀 이후의 섹션을 참조하여 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)
- LaTeX
- City
- Hinton
- Pauli vector
- Qsphere
- Bloch
엄밀히 말해 "플롯"은 아니지만, Qiskit은 Jupyter 노트북에서 보기 좋게 표시되는 Statevector 및 DensityMatrix 객체의 LaTeX 표현을 렌더링할 수 있습니다. 이는 양자 상태를 표기하는 표준 수학 관례를 따릅니다. 양자 정보 기초: 단일 시스템에서 더 자세히 읽어보세요.
상태 벡터는 기본적으로 "켓 표기법"을 사용하며, 밀도 행렬은 2×2 행렬로 표시됩니다.
"latex"를 "latex_source"로 대체하여 원시 LaTeX 문자열을 얻을 수도 있습니다.
이 플롯은 각 밀도 행렬 요소의 실수 및 허수 부분을 두 개의 3차원 막대 차트로 표시합니다. 막대가 도시의 고층 빌딩을 닮았기 때문에 "city" 플롯이라고 합니다. 플롯하는 상태는 다음과 같은 밀도 행렬을 가집니다.
자세한 정보는 API 문서를 참조하세요.
이 플롯은 "city" 플롯과 매우 유사하지만, 각 요소의 크기는 막대의 높이가 아닌 정사각형의 크기로 표현됩니다. 흰색 정사각형은 양수 값을 가진 요소를 나타내고, 검은색 정사각형은 음수 값을 가진 요소를 나타냅니다. 플롯하는 상태는 다음과 같은 밀도 행렬을 가집니다.
자세한 정보는 API 문서를 참조하세요.
관측 가능량은 가능한 측정 결과가 실수가 되도록 양자 상태를 측정하는 방법입니다. 결과의 기댓값은 해당 상태에서 관측 가능량의 기댓값으로도 알려져 있으며, 그 상태의 무한히 많은 관측의 평균으로 생각할 수 있습니다.
파울리 행렬의 텐서 곱은 모두 +1 또는 -1을 반환하는 관측 가능량입니다. 이 플롯은 다양한 파울리 연산자에 대한 상태의 기댓값을 막대 차트로 표시합니다. 모든 밀도 행렬은 기댓값을 가중치로 하여 이러한 파울리 행렬의 합으로 표현될 수 있습니다.
예를 들어, 이 상태는 다음 항들의 합으로 표현될 수 있습니다:
SparsePauliOp를 사용하여 이러한 계수를 계산할 수도 있습니다.
자세한 정보는 API 문서를 참조하세요.
"QSphere"는 상태 벡터의 각 요소의 진폭과 위상을 구의 표면에 플롯하는 Qiskit 고유의 양자 상태 보기입니다. 각 점의 두께는 진폭을 나타내고, 색상은 위상을 나타냅니다. 혼합 상태의 경우 각 구성 요소에 대한 구를 표시합니다.
자세한 정보는 API 문서를 참조하세요.
Qubit 상태의 블로흐 벡터는 3차원 공간의 X, Y, Z 축에 매핑된 X, Y, Z 파울리 관측 가능량에서의 기댓값입니다. 이 플롯은 다중 Qubit 양자 상태를 단일 Qubit 공간으로 투영하고 각 Qubit을 블로흐 구에 플롯합니다. 이 시각화는 개별 Qubit의 기댓값만 보여줍니다. Qubit 간의 상관관계를 보여줄 수 없으므로 얽힌 양자 상태를 완전히 설명할 수 없습니다.
자세한 정보는 API 문서를 참조하세요.
psi.draw("latex") # psi is a Statevector object
from qiskit.quantum_info import DensityMatrix
DensityMatrix(psi).draw("latex") # convert to a DensityMatrix and draw
from qiskit.visualization import plot_state_city
plot_state_city(psi)
# Alternative: psi.draw("city")
from qiskit.visualization import plot_state_hinton
plot_state_hinton(psi)
# Alternative: psi.draw("hinton")
from qiskit.visualization import plot_state_paulivec
plot_state_paulivec(psi)
# Alternative: psi.draw("paulivec")
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")
from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(psi)
# Alternative: psi.draw("bloch")
상태 플롯 함수의 옵션
모든 상태 플롯 함수는 다음 인수를 허용합니다 (Matplotlib 그림을 반환하지 않는 LaTeX 드로어와 figsize만 허용하는 plot_state_qsphere 제외):
- title (str): 플롯 상단에 표시되는 플롯 제목 문자열
- figsize (tuple): 인치 단위의 그림 크기 (너비, 높이)
plot_state_city 및 plot_state_paulivec 함수는 막대 색상을 지정하는 color 인수 (문자열 목록)도 허용합니다. 자세한 정보는 API 문서를 참조하세요.