オペレーター
class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)
ベース: LinearOp
行列演算子クラス
これは行列演算子 。 evolve() a Statevector 行列とベクトルの乗算によって
そして evolve() a DensityMatrix 左右の乗算によって
例えば、ゼロの状態 に適用される以下の演算子 は、それを1の状態 に変更する:
>>> import numpy as np
>>> from qiskit.quantum_info import Operator
>>> op = Operator(np.array([[0.0, 1.0], [1.0, 0.0]])) # Represents Pauli X operator>>> from qiskit.quantum_info import Statevector
>>> sv = Statevector(np.array([1.0, 0.0]))
>>> sv.evolve(op)
Statevector([0.+0.j, 1.+0.j],
dims=(2,))>>> from qiskit.quantum_info import DensityMatrix
>>> dm = DensityMatrix(np.array([[1.0, 0.0], [0.0, 0.0]]))
>>> dm.evolve(op)
DensityMatrix([[0.+0.j, 0.+0.j],
[0.+0.j, 1.+0.j]],
dims=(2,))演算子オブジェクトを初期化します。
パラメーター
- data (QuantumCircuit |Operation | BaseOperator | np.ndarray) – オペレータを初期化するためのデータ。
- input_dims (tuple | None) – 入力サブシステムの寸法。
- output_dims (tuple | None) – 出力サブシステムの寸法。
レイズ
QiskitError - 入力データを演算子として初期化できない場合。
追加情報:
入力寸法または出力寸法がNoneの場合は、入力データから自動的に決定される。 入力データが( 2**N, 2**N ) 形式のNumpy配列の場合、qubitシステムが使用される。 入力演算子がN量子ビット演算子でない場合、入力の形状で指定された次元を持つ1つのサブシステムを割り当てます。 この方法で初期化された2つの演算子は、正規量子ビットの次数(または順列)と一致する場合のみ、等価であるとみなされることに注意してください。 参照 Operator.from_circuit() を参照のこと。
属性
atol
デフォルト値: 1e-08
data
基礎となるNumpy配列。
dim
タプル(input_shape, output_shape)を返す。
num_qubits
N量子ビット演算子の場合は量子ビット数を、それ以外の場合はNoneを返す。
qargs
演算子の qargs を返す。
rtol
デフォルト値: 1e-05
settings
オペレーターの設定を戻します。
方法
adjoint
apply_permutation
apply_permutation(perm, front=False)
オペレータのデータを並べ替えで構成して変更する。
パラメーター
- perm (list) – 順列パターンを適用した後、どの量子ビットが0、1、2などの位置を占めるかを記述する。
- front (bool) –
Trueに設定すると、並べ替えは演算子の前に適用され、 に設定すると、並べ替えは演算子の後に適用される。False
戻り値
修正された演算子。
戻りの型
レイズ
QiskitError - 並べ替えパターンのサイズが演算子の次元と一致しない場合。
compose
compose(other, qargs=None, front=False)
別の Operator との演算子の合成を返します。
パラメーター
- other (Operator) – 演算子オブジェクト。
- qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。
- front (bool) – Trueの場合、左掛け算ではなく右掛け算で合成する [:False].
戻り値
構成されたオペレーター。
戻りの型
レイズ
QiskitError - 他が演算子に変換できない場合、または指定されたサブシステムに対して互換性のない寸法を持つ場合。
conjugate
copy
dot
dot(other, qargs=None)
右掛け演算子 self * other を返します。
パラメーター
- other (Operator) – 演算子オブジェクト。
- qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。
戻り値
演算子を乗じた右行列。
戻りの型
ドット積は、 @ 二項演算子を用いて求めることができる。 したがって、 a.dot(b) は a @ b と等価である。
draw
draw(output=None, **drawer_args)
オペレータの視覚化を返します。
repr : String of the state's __repr__.
テキストで表示されます:ASCII TextMatrix コンソールに表示できる。
latex :Jupyterノートブックで表示するためのIPython Latexオブジェクト。
latex_source : LaTeX を用いて配列を生成する、コンパイルされていない生の ASCII ソース。
パラメーター
- output (str) – 状態の描画に使用する出力方法を選択します。 有効な選択肢は repr, text, latex, latex_source、デフォルトは repr。
- drawer_args - 関連する描画関数またはコンストラクタ ( TextMatrix( ), array_to_latex()) に直接渡される引数。関数のドキュメントは qiskit.visualization の該当関数を参照。
戻り値
オペレーターの図面。
戻りの型
str または TextMatrix または IPython.display.Latex
レイズ
- ValueError - 無効な出力方法が選択された場合。
- MissingOptionalLibrary - SymPy がインストールされておらず、
'latex'または'latex_source'がoutputのために選択されている場合。
equiv
expand
expand(other)
別のOperatorとの逆順テンソル積を返す。
パラメーター
other (Operator) – 演算子オブジェクト。
戻り値
テンソル積 。
は現在のオペレーターであり、 はもう一方のオペレーターである。
戻りの型
from_circuit
classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)
から新しいOperatorオブジェクトを作成する。 QuantumCircuit
しかし QuantumCircuit オブジェクトを直接 data としてクラスのコンストラクタに渡すことができますが、この場合、回路をどのように使って Operator. このコンストラクタ・メソッドによって Operator を制御することができます。
デフォルトでは、このコンストラクタのメソッドは、設定された初期レイアウト(つまりトランスパイルされた後)に基づいて量子ビットを並べ替えます。 また、手動で Layout オブジェクトを直接提供するオプションもある。
パラメーター
- circuit (QuantumCircuit) – を使用して
QuantumCircuitからOperatorオブジェクトを作成します。 - ignore_set_layout (bool) – 入力
circuitにレイアウトが設定されている場合、Trueに設定すると無視される - layout (Layout) – このkwargを指定すると、作成された量子ビットの並べ替えに使用する特定のレイアウトを指定することができる。
Operator. これを指定すると、circuit入力に含まれるレイアウトの代わりに使用される。 指定された場合Layoutの仮想ビットがcircuit入力に存在しなければならない。 - final_layout (Layout) – このkwargを指定すると、トランスパイラのルーティング段階でスワップが挿入されることによって生じる出力の並べ替えを表すことができる。
戻り値
入力回路を表す演算子
戻りの型
from_label
classmethod from_label(label)
単一量子ビット演算子のテンソル積を返す。
パラメーター
label (string) – 単一量子ビット演算子文字列。
戻り値
N量子ビット演算子。
戻りの型
レイズ
QiskitError - ラベルに無効な文字が含まれているか、ラベルの長さが明示的に指定された num_qubits より大きい場合。
追加情報:
ラベルは、単一量子ビット行列に対応しています: 'I': [ [1, 0], [0, 1] ] 'X': [ [0, 1], [1, 0] ] 'Y': [ [0, -1j], [1j, 0] ] 'Z': [ [1, 0], [0, -1] ] 'H': [ [1, 1], [1, -1] ] / sqrt(2) 'S': [ [1, 0], [0, 1j] ] 'T': [ [1, 0], [0, ( 1+1j ) / sqrt(2)] ] '0': [ [1, 0], [0, 0] ] '1': [ [0, 0], [0, 1] ] '+': [ [0.5, 0.5], [0.5、 0.5] ] '-': [ [0.5、 -0.5]、 [-0.5、 0.5] ] 'r': [ [0.5、 -0.5j]、 [0.5j、 0.5] ] 'l': [ [0.5、 0.5j]、 [-0.5j、 0.5] ]
input_dims
is_unitary
output_dims
power
power(n, branch_cut_rotation=3.141592653589793e-12, assume_unitary=False)
演算子の行列のべき乗を返します。
複素位相が である固有値を持つ演算子の非整数乗は、複素平面上で分岐カットがあり、このカットの周りの主根の計算がBLAS実装の精度/違いの対象となる。 例えば、Pauli Yの平方根は、 -1 固有値が complex(-1, tiny) または complex(-1, -tiny) のどちらとして求められるかによって、 または Y回転を返すことができる。 このような固有値は量子情報では本当によくあるものなので、この関数はまず入力行列を位相回転させ、分岐カットをはるかに一般的でない点にシフトさせる。 ある演算子がこの位相に近い固有値を持つ場合、ブランチカット点周辺の根本的な数値精度の問題が残る。 この回転の大きさは branch_cut_rotation 。
branch_cut_rotation の選択は、発見される主根に影響する。 例えば ZGate は SGate または SdgGate と計算される:
from qiskit.circuit import library
from qiskit.quantum_info import Operator
z_op = Operator(library.ZGate())
assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())パラメーター
- n (float) – マトリックスを引き上げる力
- branch_cut_rotation (float) – 複素平面上のブランチカットに適用する回転角度。 これにより、切断された枝は、 の共通点から遠ざかるが、主根として別の根が選択される可能性がある。 回転は反時計回りで、複素位相の標準的な慣例に従っている。
- assume_unitary (bool) –
Trueの場合、演算子はユニタリーであると仮定される。 この場合、分数乗については、Schurの分解に基づくより高速な実装を採用する。
戻り値
その結果の演算子 O ** n。
戻りの型
レイズ
QiskitError - 演算子の入力寸法と出力寸法が等しくない場合。
引数 assume_unitary を True に設定するのは、演算子がユニタリー(あるいはより一般的にはノーマル)である場合のみ安全である。 そうでない場合、この関数は不正な出力を返します。
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
入出力サブシステムの寸法を変更した浅いコピーを返す。
パラメーター
- input_dims (None or tuple) – 新しいサブシステムの入力寸法。 None の場合、元の入力ディムが保持される [Default:なし]。
- output_dims (None or tuple) – 新しいサブシステムの出力寸法。 None の場合、元の出力ディムが保持される [Default:なし]。
- num_qubits (None or int) – N-qubit 演算子への整形[デフォルト:なし]。
戻り値
入出力寸法を整形した self を返す。
戻りの型
BaseOperator
レイズ
QiskitError - すべてのサブシステム入力次元またはサブシステム出力次元の合計サイズが一定でない場合。
reverse_qargs
reverse_qargs()
サブシステムの順序を逆にした Operator を返します。
テンソル積演算子の場合、これはテンソル積部分系の順序を逆にすることと等価である。 演算子 の場合、返される演算子は となる。
戻り値
サブシステムの順序が逆になっている。
戻りの型
tensor
tensor(other)
別の演算子とのテンソル積を返す。
パラメーター
other (Operator) – 演算子オブジェクト。
戻り値
テンソル積 。
は現在のオペレーターであり、 はもう一方のオペレーターである。
戻りの型
テンソル積は、 ^ 二項演算子を用いて求めることができる。 したがって、 a.tensor(b) は a ^ b と等価である。