状態ベクトル
class qiskit.quantum_info.Statevector(data, dims=None)
ベース: QuantumState, TolerancesMixin
状態ベクトルクラス
ステートベクトル・オブジェクトを初期化する。
パラメーター
- data (np.ndarray | list |Statevector |Operator |QuantumCircuit |circuit.instruction.Instruction) – 状態ベクトルを構築するためのデータ。 これは複素数ベクトル、別の状態ベクトル、1列のみの
Operator、またはQuantumCircuitまたはInstructionのいずれかである。 データが回路または命令の場合、すべての量子ビットがゼロ状態に初期化されていると仮定して状態ベクトルが構成される。 - dims (int |tuple |list | None) – 状態のサブシステム次元(追加情報を参照)。
レイズ
QiskitError - 入力データが有効でない場合。
追加情報:
dims kwargはNone、整数、または整数の反復可能値である。
Iterable- サブシステムの次元はリストの値であり、サブシステムの総数はリストの長さで与えられる。IntまたはNone– 入力ベクトルの長さが状態の総次元を決定する。 2の累乗である場合、状態はN量子ビットの状態として初期化されます。 2の冪でない場合、その状態は単一のd次元部分系を持つことになる。
属性
atol
デフォルト値: 1e-08
data
データを返す。
dim
状態次元の合計を返す。
num_qubits
N量子ビット状態の場合は量子ビット数を、そうでない場合はNoneを返す。
rtol
デフォルト値: 1e-05
settings
リターンの設定
方法
conjugate
copy
dims
draw
draw(output=None, **drawer_args)
Statevectorを可視化して返す。
再掲 :ASCII TextMatrix 州の __repr__。
テキストで表示されます:ASCII TextMatrix コンソールに表示できる。
latex :Jupyterノートブックで表示するためのIPython Latexオブジェクト。
latex_source : LaTeX を用いて配列を生成する、コンパイルされていない生の ASCII ソース。
qsphere : Matplotlib figure, plot_state_qsphere()を使用した状態ベクトルのレンダリング。
hinton : Matplotlib figure, rendering of statevector using plot_state_hinton().
bloch : Matplotlib figure, plot_bloch_multivector()を使用した状態ベクトルのレンダリング。
city : Matplotlib figure, rendering of statevector using plot_state_city().
paulivec : Matplotlib figure, rendering of statevector using plot_state_paulivec().
パラメーター
- output (str) – 状態の描画に使用する出力方法を選択します。 有効な選択肢は、repr、text、latex、latex_source、qsphere、hinton、bloch、city、paulivecである。 デフォルトはrepr。 デフォルトは、
[default]の~/.qiskit/settings.confにstate_drawer = <default>という行を追加することで変更できる。 - drawer_args - 関連する描画関数またはコンストラクタに直接渡される引数 ( TextMatrix( ), array_to_latex(), plot_state_qsphere(), plot_state_hinton() or plot_bloch_multivector())。その関数のドキュメントは、 qiskit.visualization の下にある関連する関数を参照。
戻り値
matplotlib.Figure または str または TextMatrix または IPython.display.Latex :ステートベクトルの描画。
レイズ
ValueError - 無効な出力方法が選択された場合。
例
プロット
from numpy import sqrt
from qiskit.quantum_info import Statevector
sv=Statevector([1/sqrt(2), 0, 0, -1/sqrt(2)])
sv.draw(output='hinton')
equiv
equiv(other, rtol=None, atol=None)
他方がグローバル位相までの状態ベクトルとして等価であれば真を返す。
otherがステートベクタではないが、ステートベクタオブジェクトの初期化に使用できる場合、これはStatevector(other)がグローバルフェーズまでの現在のステートベクタと等価であることをチェックします。
パラメーター
- other (Statevector) –
Statevectorを構築できるオブジェクト。 - rtol (float) – 比較のための相対公差値。
- atol (float) – 比較のための絶対許容値。
戻り値
状態ベクトルがグローバル位相まで等価であれば真。
戻りの型
evolve
evolve(other, qargs=None)
演算子によって量子状態を進化させる。
パラメーター
- other (Operator |QuantumCircuit |circuit.Instruction) – 進化するオペレーター
- qargs (list) – 演算子を適用するStatevectorサブシステムの位置のリスト。
戻り値
出力量子状態。
戻りの型
レイズ
QiskitError - 演算子の次元が指定されたStatevectorサブシステムの次元と一致しない場合。
expand
expand(other)
テンソル積の状態 other ⊗ self を返す。
パラメーター
other (Statevector) – 量子状態オブジェクト。
戻り値
テンソル積の状態 other ⊗ self.
戻りの型
レイズ
QiskitError - 他が量子状態でない場合
expectation_value
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False)
量子回路から状態ベクトルを作成する。
パラメーター
- circuit (QuantumCircuit) – 量子回路
- ignore_set_layout (bool) – に設定されている
True場合、入力にレイアウトcircuitが設定されていても無視されます。 デフォルトは.Falseです。
戻り値
回路を全ゼロ入力状態に適用して得られる状態ベクトル。
戻りの型
例
トランスパイルされた回路から状態ベクトルを作成する:
from qiskit import QuantumCircuit, transpile
from qiskit.quantum_info import Statevector
from qiskit.providers.basic_provider import BasicSimulator
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.swap(1, 2)
backend = BasicSimulator()
transpiled1 = transpile(qc, backend, optimization_level=0)
transpiled2 = transpile(qc, backend, optimization_level=2)
# Get statevectors accounting for layout changes
sv1 = Statevector.from_circuit(transpiled1)
sv2 = Statevector.from_circuit(transpiled2)
# These will be equivalent up to global phase
print(sv1.equiv(sv2)) # Truefrom_instruction
classmethod from_instruction(instruction)
命令の出力ステートベクトルを返す。
状態ベクトルは、入力命令または回路と同じ数の量子ビットの状態( )で初期化され、入力命令によって進化し、出力状態ベクトルが返される。
パラメーター
instruction (qiskit.circuit.Instruction orQuantumCircuit) – 命令または回路
戻り値
最終的な状態ベクトル。
戻りの型
レイズ
QiskitError - ステートベクトル・シミュレーションに無効な命令が含まれている場合。
from_int
static from_int(i, dims)
計算基底の状態ベクトルを返す。
パラメーター
戻り値
計算基礎状態 。
戻りの型
追加情報:
dims kwargは整数または整数の反復可能値である。
Iterable- サブシステムの次元はリストの値であり、サブシステムの総数はリストの長さで与えられる。Int- 整数は状態の総次元を指定する。 それが2のべき乗であれば、状態はN量子ビット状態として初期化される。 もしそれが2のべき乗でなければ、状態は1つのd次元サブシステムを持つことになる。
from_label
classmethod from_label(label)
Pauli X,Y,Z 固有状態のテンソル積を返す。
ラベル | 状態ベクトル |
|---|---|
"0" | |
"1" | |
"+" | |
"-" | |
"r" | |
"l" |
パラメーター
label (string) – 固有状態の文字列(ketラベル)(許容される値については表を参照)。
戻り値
N量子ビットの基底状態のベクトル。
戻りの型
レイズ
QiskitError - ラベルに無効な文字が含まれているか、ラベルの長さが明示的に指定された num_qubits より大きい場合。
inner
inner(other)
自己と他者の内積を として返す。
パラメーター
other (Statevector) – 量子状態オブジェクト。
戻り値
自他の内積、 。
戻りの型
np.complex128
レイズ
QiskitError - もう一方が量子状態でない場合、あるいは次元が異なる場合。
is_valid
measure
measure(qargs=None)
サブシステムを測定し、結果と測定後の状態を返す。
この関数は、測定結果のサンプリングに QuantumStates 内部乱数発生器を使用することに注意してください。 RNGシードは seed() メソッドで設定できます。
パラメーター
qargs (list or None) – None の場合は、すべてのサブシステムの測定をサンプリングする。
戻り値
ペア (outcome, state) outcome は
測定結果の文字列ラベルであり、 state は対応する測定結果の折りたたまれた測定後の状態である。
戻りの型
probabilities
probabilities(qargs=None, decimals=None)
サブシステムの測定確率ベクトルを返す。
測定確率は、計算(対角)基準での測定に関するものである。
パラメーター
- qargs (None or list) – None の場合はすべてのサブシステムに対して返す (デフォルト: None)。
- decimals (None or int) – 値を丸める小数点以下の桁数。 None の場合、丸めは行われない(デフォルト:None)。
戻り値
確率のNumpyベクトル配列。
戻りの型
np.array
例
2量子ビットの積状態 を考える。
from qiskit.quantum_info import Statevector
psi = Statevector.from_label('+0')
# Probabilities for measuring both qubits
probs = psi.probabilities()
print('probs: {}'.format(probs))
# Probabilities for measuring only qubit-0
probs_qubit_0 = psi.probabilities([0])
print('Qubit-0 probs: {}'.format(probs_qubit_0))
# Probabilities for measuring only qubit-1
probs_qubit_1 = psi.probabilities([1])
print('Qubit-1 probs: {}'.format(probs_qubit_1))probs: [0.5 0. 0.5 0. ]
Qubit-0 probs: [1. 0.]
Qubit-1 probs: [0.5 0.5]また、 qargs リスト中の量子ビットの順番を並べ替えることで、確率出力中の量子ビットの位置を変えることができる
from qiskit.quantum_info import Statevector
psi = Statevector.from_label('+0')
# Probabilities for measuring both qubits
probs = psi.probabilities([0, 1])
print('probs: {}'.format(probs))
# Probabilities for measuring both qubits
# but swapping qubits 0 and 1 in output
probs_swapped = psi.probabilities([1, 0])
print('Swapped probs: {}'.format(probs_swapped))probs: [0.5 0. 0.5 0. ]
Swapped probs: [0.5 0.5 0. 0. ]probabilities_dict
probabilities_dict(qargs=None, decimals=None)
サブシステムの測定確率辞書を返す。
測定確率は、計算(対角)基準での測定に関するものである。
この辞書表現は、辞書のキーがサブシステムの基底ベクトルを表すqudit文字列であるKetのような表記法を用いている。 サブシステムの次元が10を超える場合は、サブシステムを区別できるように、整数の間にカンマ区切りが挿入される。
パラメーター
- qargs (None or list) – None の場合はすべてのサブシステムに対して返す (デフォルト: None)。
- decimals (None or int) – 値を丸める小数点以下の桁数。 None の場合、丸めは行われない(デフォルト:None)。
戻り値
ディクト(ケット)形式の測定確率。
戻りの型
purity
reset
reset(qargs=None)
状態またはサブシステムを0状態にリセットする。
パラメーター
qargs (list or None) – None の場合、すべてのサブシステムが 0 状態にリセットされます (デフォルト:None)。
戻り値
リセット状態。
戻りの型
追加情報:
すべてのサブシステムがリセットされると、すべてのサブシステムが初期状態に戻ります。 一部のサブシステムのみがリセットされた場合、この関数はそれらのサブシステムに対して測定を行い、測定後の収縮状態が0状態へと回転するようにサブシステムを進化させます。 このサンプリングのRNGシードは、seed() method を使用して設定できます。
reverse_qargs
reverse_qargs()
サブシステムの順序を逆にしたステートベクトルを返す。
テンソル積状態の場合、これはテンソル積部分系の順序を逆にすることと等価である。 状態ベクトル の場合、返される状態ベクトルは となる。
戻り値
サブシステムの順序を逆にした状態ベクトル。
戻りの型
sample_counts
sample_counts(shots, qargs=None)
量子ビットの測定結果のディクショ ンを計算基礎にサンプリングする。
パラメーター
戻り値
サンプル数辞書。
戻りの型
追加情報
この関数は*、* 現在の状態のメジャー
probabilities()を使用して測定結果をサンプリングします。 実際に測定を実施するわけではないので、現在の状態が変更されることはない。サンプリングに使用される乱数生成器のシードは、state
seed()のメソッドを使用して固定値に設定できます。
sample_memory
sample_memory(shots, qargs=None)
量子ビットの測定結果のリストを計算基礎にサンプリングする。
パラメーター
戻り値
サンプリング順に並べたサンプリングカウントの一覧。
戻りの型
np.array
追加情報
この関数は*、* 現在の状態のメジャー
probabilities()を使用して測定結果をサンプリングします。 実際に測定を実施するわけではないので、現在の状態が変更されることはない。サンプリングに使用される乱数生成器のシードは、state
seed()のメソッドを使用して固定値に設定できます。
seed
tensor
tensor(other)
テンソル積の状態 self ⊗ other を返す。
パラメーター
other (Statevector) – 量子状態オブジェクト。
戻り値
テンソル積演算子 self ⊗ other。
戻りの型
レイズ
QiskitError - 他が量子状態でない場合
to_dict
to_dict(decimals=None)
状態ベクトルを辞書形式に変換する。
この辞書表現は、辞書のキーがサブシステムの基底ベクトルを表すqudit文字列であるKetのような表記法を用いている。 サブシステムの次元が10を超える場合は、サブシステムを区別できるように、整数の間にカンマ区切りが挿入される。
パラメーター
decimals (None or int) – 値を丸める小数点以下の桁数。 None の場合、丸めは行われない(デフォルト:None)。
戻り値
ステートベクトルの辞書形式。
戻りの型
例
2量子ビットの状態ベクトルのケート形
from qiskit.quantum_info import Statevector
psi = Statevector.from_label('-0')
print(psi.to_dict()){'00': (0.7071067811865475+0j), '10': (-0.7071067811865475+0j)}非準ビット・サブシステムでは、整数の範囲は0から9までである。 例えば、クトリット・システムでは
import numpy as np
from qiskit.quantum_info import Statevector
vec = np.zeros(9)
vec[0] = 1 / np.sqrt(2)
vec[-1] = 1 / np.sqrt(2)
psi = Statevector(vec, dims=(3, 3))
print(psi.to_dict()){'00': (0.7071067811865475+0j), '22': (0.7071067811865475+0j)}サブシステムの寸法が大きい場合は、区切りが必要である。 以下の例は、量子ビットと10次元量子ビットからなる20次元システムの場合である。
import numpy as np
from qiskit.quantum_info import Statevector
vec = np.zeros(2 * 10)
vec[0] = 1 / np.sqrt(2)
vec[-1] = 1 / np.sqrt(2)
psi = Statevector(vec, dims=(2, 10))
print(psi.to_dict()){'00': (0.7071067811865475+0j), '91': (0.7071067811865475+0j)}