Shortcuts

注釈

当ページは 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]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_4_0.png

ヒストグラムをプロットするときのオプション

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]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_6_0.png
[5]:
plot_histogram([counts, second_counts], legend=legend, sort='desc', figsize=(15,12),
               color=['orange', 'black'], bar_labels=False)
[5]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_7_0.png

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\) (複素ベクトル)で記述されます。状態行列は状態ベクトルと次式の関係にあります。

\[\rho = |\psi\rangle\langle \psi|,\]

そして、混合状態(状態ベクトルの正の和)で表すのが、より一般的です。

\[\rho = \sum_k p_k |\psi_k\rangle\langle \psi_k |.\]

関数によって生成される可視化は、以下のとおりです。:

  • '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]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_13_0.png
[9]:
plot_state_hinton(psi)
[9]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_14_0.png
[10]:
plot_state_qsphere(psi)
[10]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_15_0.png
[11]:
plot_state_paulivec(psi)
[11]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_16_0.png
[12]:
plot_bloch_multivector(psi)
[12]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_17_0.png

ここでは、すべてのベクトルがゼロであるため、単一量子ビット空間内には、量子状態に関する情報がないことがわかります。

状態プロット関数を使用するときのオプション

量子状態をプロットするためのさまざまな関数は、プロットのレンダリング方法を調整するための多くのオプションを提供します。 使用できるオプションは、使用している関数により異なります。

plot_state_city() オプション

  • title (str): プロットのタイトルを表す文字列

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

  • color (list): 行列要素の実部と虚部の色を指定する、長さ2のリスト。

[13]:
plot_state_city(psi, title="My City", color=['black', 'orange'])
[13]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_21_0.png

plot_state_hinton() オプション

  • title (str): プロットのタイトルを表す文字列

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

[14]:
plot_state_hinton(psi, title="My Hinton")
[14]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_23_0.png

plot_state_paulivec() オプション

  • title (str): プロットのタイトルを表す文字列

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

  • color (list または str): 期待値バーの色。

[15]:
plot_state_paulivec(psi, title="My Paulivec", color=['purple', 'orange', 'green'])
[15]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_25_0.png

plot_state_qsphere() オプション

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

plot_bloch_multivector() オプション

  • title (str): プロットのタイトルを表す文字列

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

[16]:
plot_bloch_multivector(psi, title="My Bloch Spheres")
[16]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_28_0.png

状態プロット関数からの出力の使用

視覚化のために 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]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_35_0.png

plot_bloch_vector() のオプション

  • title (str): プロットのタイトルを表す文字列

  • figsize (tuple): 図のサイズ。単位はインチ (幅, 高さ)。

[21]:
plot_bloch_vector([0,1,0], title='My Bloch Sphere')
[21]:
../../_images/tutorials_circuits_2_plotting_data_in_qiskit_37_0.png

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 SoftwareVersion
QiskitNone
Terra0.14.0
Aer0.6.0
IgnisNone
AquaNone
IBM Q Provider0.6.1
System information
Python3.7.7 (default, Mar 26 2020, 10:32:53) [Clang 4.0.1 (tags/RELEASE_401/final)]
OSDarwin
CPUs4
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.

[ ]:

表示 lang: Japanese
言語
English
Japanese
German
Korean