メインコンテンツへスキップ

Plot quantum states

Package versions

このページのコードは、以下の要件を使用して開発されました。 これらのバージョンまたはそれ以降のバージョンの使用を推奨します。

qiskit[all]~=2.3.0

量子コンピューターの状態を可視化することが役立つ場面は多くあります。たとえば、学習やデバッグの際などです。ここでは、シミュレーションや状態トモグラフィーによって特定の状態がすでに得られているものとします。可視化できるのは、小規模な量子システムの状態に限られます。

関数の出力について

このページのすべての関数はリッチオブジェクトを返します。コードセルの最終行でこれらのオブジェクトを出力すると、Jupyterノートブックではセルの下に表示されます。他の環境やスクリプトからこれらの関数を呼び出す場合は、出力を明示的に表示または保存する必要があります。

ほとんどの関数は画像(matplotlib.Figure オブジェクト)を返します。主な選択肢は次の2つです。

  • 返されたオブジェクトに対して .show() を呼び出すと、新しいウィンドウで画像が開きます(設定済みのmatplotlibバックエンドがインタラクティブな場合)。
  • .savefig("out.png") を呼び出すと、現在の作業ディレクトリに out.png としてfigureが保存されます。savefig() メソッドはパスを受け取るため、保存先の場所やファイル名を調整できます。例:plot_state_city(psi).savefig("out.png")

LaTeX出力は IPython.display.Latex オブジェクトです。Jupyter以外の環境でのベストな選択肢は、この出力を避けることです。状態をテキスト表現として印刷するか、latex_source drawerに切り替えてLaTeXのソース文字列を返すようにしてください。

量子状態は、密度行列 ρ\rho(エルミート行列)またはstatevector ψ|\psi\rangle(複素ベクトル)のいずれかです。密度行列はstatevectorと次の関係にあります。

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

密度行列はより一般的であり、混合状態(statevectorの正の重み付き和)を表すことができます。

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

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)

厳密には「プロット」ではありませんが、Qiskitは Statevector オブジェクトと DensityMatrix オブジェクトの両方について、Jupyterノートブックで見やすいLaTeX表現をレンダリングできます。これらは量子状態を記述するための標準的な数学的記法に従っています。詳細は 量子情報の基礎:単一システム をご覧ください。

Statevectorはデフォルトで「ket記法」を使用し、密度行列は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

Options for state-plotting functions

すべての状態プロット関数は以下の引数を受け付けます(LaTeX drawerはMatplotlibのfigureを返さないため対象外で、plot_state_qspherefigsize のみ受け付けます)。

  • title (str): プロットのタイトルとなる文字列。プロットの上部に表示されます。
  • figsize (tuple): figureのサイズ(インチ単位)(幅, 高さ)

plot_state_city 関数と plot_state_paulivec 関数は、棒の色を指定する color 引数(文字列のリスト)も受け付けます。詳細については APIドキュメント をご覧ください。

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

Next steps

推奨事項