注釈
当ページは tutorials/circuits/2_plotting_data_in_qiskit.ipynb から生成されました。
IBM Quantum lab でインタラクティブに実行します。
Qiskit 可視化ツール¶
[1]:
from qiskit import *
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
ヒストグラムのプロット¶
実デバイスまたは qasm_simulator
上で実行される量子回路からのデータを可視化するために、シンプルな関数を用意しています。
plot_histogram(data)
例として、2量子ビットのベル状態を作ります。
[2]:
# quantum circuit to make a Bell state
bell = QuantumCircuit(2, 2)
bell.h(0)
bell.cx(0, 1)
meas = QuantumCircuit(2, 2)
meas.measure([0,1], [0,1])
# execute the quantum circuit
backend = BasicAer.get_backend('qasm_simulator') # the device to run on
circ = bell + meas
result = execute(circ, backend, shots=1000).result()
counts = result.get_counts(circ)
print(counts)
{'00': 528, '11': 472}
[3]:
plot_histogram(counts)
[3]:

ヒストグラムをプロットするときのオプション¶
plot_histogram()
には出力グラフの調整のためのいくつかのオプションがあります。最初のオプションは legend
kwarg (可変長引数) です。これは実行のラベル指定に利用します。特に同じヒストグラム中の複数の実行結果をプロットする場合に有益です。sort
kwarg はヒストグラム描画においてバーの順番を調整します。 asc
昇順 か dsc
降順のどちらかを指定できます。 number_to_keep
kwarg は表示の項目数を指定します。それ以外は rest と呼ばれるバーに集約されます。color
kwarg はバーの配色を調整します。各実行のバーに利用される配色の文字列か文字列のリストを指定します。bar_labels
kwarg ではバーの上にラベルを表示するかを調整できます。最後のオプションは figsize
kwarg で、出力図形のサイズをインチで指定したタプルです。
[4]:
# Execute 2-qubit Bell state again
second_result = execute(circ, backend, shots=1000).result()
second_counts = second_result.get_counts(circ)
# Plot results with legend
legend = ['First execution', 'Second execution']
plot_histogram([counts, second_counts], legend=legend)
[4]:

[5]:
plot_histogram([counts, second_counts], legend=legend, sort='desc', figsize=(15,12),
color=['orange', 'black'], bar_labels=False)
[5]:

plot_histogram() による出力の使用¶
視覚化のために plot_histogram() 関数を呼び出した場合の返り値は matplotlib.Figure
です。Jupyter notebook は返り値の型を理解するので、このチュートリアルでは表示されますが、Jupyter 以外で実行する場合にはこの機能は自動的には使えません。matplotlib.Figure
クラス自体は視覚化されたものを表示、保存する機能をもともと持っています。plot_histogram()
からの返り値オブジェクトに対して .show()
を呼び出すとイメージが新しいウィンドウで開きます (matplotlib バックエンドをインタラクティブに設定していることを想定)。あるいは .savefig('out.png')
で 図を out.png
に保存できます。savefig()
メソッドはパスを引数に取り、保存しようとしている図の場所やファイル名を指定できます。
状態のプロット¶
多くの状況において、量子コンピューターの状態を見たいことがあるでしょう。デバッグ用途などが考えられます。ここでは、ある状態(シミュレーションまたは状態トモグラフィーから得られたもの)があり、この量子状態を可視化することが目的であるものと仮定します。可視化には指数関数的なリソースが必要になるため、小さな量子システムの状態表示までに留めてください。量子状態のさまざまなタイプの可視化を生成するため、いくつかの関数があります。
plot_state_city(quantum_state)
plot_state_qsphere(quantum_state)
plot_state_paulivec(quantum_state)
plot_state_hinton(quantum_state)
plot_bloch_multivector(quantum_state)
量子状態は、状態行列 \(\rho\) (エルミート行列) または状態ベクトル \(|\psi\rangle\) (複素ベクトル)で記述されます。状態行列は状態ベクトルと次式の関係にあります。
そして、混合状態(状態ベクトルの正の和)で表すのが、より一般的です。
関数によって生成される可視化は、以下のとおりです。:
'plot_state_city'
: 状態行列の実部と虚部が都市のようにプロットされている、量子状態の標準的なビュー。'plot_state_qsphere'
: 状態ベクトルの振幅と位相が球体にプロットされる、量子状態のQiskit独自ビュー。'plot_state_paulivec'
: \(\rho=\sum_{q=0}^{d^2-1}p_jP_j/d\) を基底としたパウリ演算子による状態行列の表現。'plot_state_hinton'
:'city'
と同様だが、要素の大きさは行列要素の値を表す。'plot_bloch_multivector'
: 量子状態を単一量子ビット空間へ射影し、ブロッホ球上にプロットする。
[6]:
from qiskit.visualization import plot_state_city, plot_bloch_multivector
from qiskit.visualization import plot_state_paulivec, plot_state_hinton
from qiskit.visualization import plot_state_qsphere
[7]:
# execute the quantum circuit
backend = BasicAer.get_backend('statevector_simulator') # the device to run on
result = execute(bell, backend).result()
psi = result.get_statevector(bell)
[8]:
plot_state_city(psi)
[8]:

[9]:
plot_state_hinton(psi)
[9]:

[10]:
plot_state_qsphere(psi)
[10]:

[11]:
plot_state_paulivec(psi)
[11]:

[12]:
plot_bloch_multivector(psi)
[12]:

ここでは、すべてのベクトルがゼロであるため、単一量子ビット空間内には、量子状態に関する情報がないことがわかります。
状態プロット関数を使用するときのオプション¶
量子状態をプロットするためのさまざまな関数は、プロットのレンダリング方法を調整するための多くのオプションを提供します。 使用できるオプションは、使用している関数により異なります。
plot_state_city() オプション
title (str): プロットのタイトルを表す文字列
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
color (list): 行列要素の実部と虚部の色を指定する、長さ2のリスト。
[13]:
plot_state_city(psi, title="My City", color=['black', 'orange'])
[13]:

plot_state_hinton() オプション
title (str): プロットのタイトルを表す文字列
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
[14]:
plot_state_hinton(psi, title="My Hinton")
[14]:

plot_state_paulivec() オプション
title (str): プロットのタイトルを表す文字列
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
color (list または str): 期待値バーの色。
[15]:
plot_state_paulivec(psi, title="My Paulivec", color=['purple', 'orange', 'green'])
[15]:

plot_state_qsphere() オプション
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
plot_bloch_multivector() オプション
title (str): プロットのタイトルを表す文字列
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
[16]:
plot_bloch_multivector(psi, title="My Bloch Spheres")
[16]:

状態プロット関数からの出力の使用¶
視覚化のために plot_histogram() 関数を呼び出した場合の返り値は matplotlib.Figure
です。Jupyter notebook は返り値の型を理解するので、このチュートリアルでは表示されますが、Jupyter 以外で実行する場合にはこの機能は自動的には使えません。matplotlib.Figure
クラス自体は視覚化されたものを表示、保存する機能をもともと持っています。plot_histogram()
から返されたオブジェクトに対して .show()
を呼び出すとイメージが新しいウィンドウで開きます (このときmatplotlib バックエンドをインタラクティブに設定していることを想定) 。あるいは .savefig('out.png')
で 図を out.png
に保存できます。 savefig()
メソッドはパスを引数に取り、保存しようとしている図の場所やファイル名を指定できます。
Jupyter Notebook でのインタラクティブな状態プロット¶
plot_histogram()
と同じように、量子状態をプロットする関数ごとに、2番目の関数があります。 これらの関数の名前は同じですが、先頭に i
が追加されます。
iplot_state_city(quantum_state)
iplot_state_paulivec(quantum_state)
iplot_state_qsphere(quantum_state)
iplot_state_hinton(quantum_state)
iplot_bloch_multivector(quantum_state)
これらの関数は、Jupyter Notebook で使用するために外部でホストされた JSライブラリを使用して作成されます。インタラクティブなプロットは Jupyter Notebook 内での実行かつ、JSライブラリを使用しホストに外部接続している場合のみ使用できます。Jupyter Notebook 外でこれらの関数を使用すると失敗するでしょう。
[17]:
from qiskit.tools.visualization import iplot_state_paulivec
[18]:
# Generate an interactive pauli vector plot
iplot_state_paulivec(psi)
ブロッホ・ベクトルのプロット¶
量子系をプロットする標準的な方法は、ブロッホ・ベクトルを使用することです。ブロッホ・ベクトルを入力値とするこの方法は、単一の量子ビットにしか適用できません。
ブロッホ・ベクトルは \([x = \mathrm{Tr}[X \rho], y = \mathrm{Tr}[Y \rho], z = \mathrm{Tr}[Z \rho]]\) として定義されます。\(X\)、\(Y\) および \(Z\) は単一量子ビットのパウリ演算子、\(\rho\) は状態行列です。
[19]:
from qiskit.visualization import plot_bloch_vector
[20]:
plot_bloch_vector([0,1,0])
[20]:

plot_bloch_vector() のオプション¶
title (str): プロットのタイトルを表す文字列
figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。
[21]:
plot_bloch_vector([0,1,0], title='My Bloch Sphere')
[21]:

plot_bloch_vector() の出力の調整¶
視覚化のために plot_bloch_vector
関数を呼び出した場合の返り値は matplotlib.Figure
です。Jupyter notebook は返り値の型を理解するので、このチュートリアルでは表示されますが、Jupyter 以外で実行する場合にはこの機能は自動的には使えません。matplotlib.Figure
クラス自体は視覚化されたものを表示、保存する機能をもともと持っています。返されたオブジェクトに対して .show()
を呼び出すとイメージが新しいウィンドウで開きます (このときmatplotlib バックエンドをインタラクティブに設定していることを想定) 。あるいは .savefig('out.png')
で 図を out.png
に保存できます。 savefig()
メソッドはパスを引数に取り、保存しようとしている図の場所やファイル名を指定できます。
[22]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
Qiskit Software | Version |
---|---|
Qiskit | None |
Terra | 0.14.0 |
Aer | 0.6.0 |
Ignis | None |
Aqua | None |
IBM Q Provider | 0.6.1 |
System information | |
Python | 3.7.7 (default, Mar 26 2020, 10:32:53) [Clang 4.0.1 (tags/RELEASE_401/final)] |
OS | Darwin |
CPUs | 4 |
Memory (Gb) | 16.0 |
Mon Apr 27 21:46:41 2020 EDT |
This code is a part of Qiskit
© Copyright IBM 2017, 2020.
This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.
[ ]: