QubitSparsePauliList
class qiskit.quantum_info.QubitSparsePauliList(data, /, num_qubits=None)
ベース: object
qubit-sparseフォーマットで保存された位相なしパウリ演算子のリスト。
表現
リスト中の個々のパウリ演算子は、 、 の形をした1量子ビットのパウリ演算子のテンソル積である。の内部表現は QubitSparsePauliList の内部表現は、非同一の単一量子ビットパウリ演算子のみを格納する。 このため、多数の量子ビットで低重みのパウリ演算子のリストを表現する効率が大幅に向上する。 例えば、:mathn-qubit 演算子のリスト は、 がqubit の 演算子を表し、それ以外はidentityを表す。 QubitSparsePauliList に格納することができる。
索引付け
QubitSparsePauliList は、 Python シーケンス (展開された collections.abc.Sequence). リストの要素は、整数によるインデックス付けが可能で、反復処理もできる。 インデックス付けであれ反復であれ、リストの要素は QubitSparsePauli インスタンスとして返されます。
建設
QubitSparsePauliList はいくつかのコンストラクタを定義している。 デフォルトのコンストラクタは、入力の型に基づいて、より特殊なコンストラクタのいずれかに委譲しようとする。 特定のコンストラクタを使用することで、よりコントロールしやすくなる。
メソッド | サマリー |
|---|---|
from_label() | 密な文字列ラベルを単一要素に変換する QubitSparsePauliList. |
from_list() | 密な文字列ラベルのリストから構築する。 |
from_sparse_list() | 疎な文字列ラベルとそれらが適用される量子ビットのタプルのリストとして与えられる要素。 |
from_pauli() | 単一の Pauli を単一要素にする QubitSparsePauliList. |
from_qubit_sparse_paulis() | のリストから構築する。 QubitSparsePaulis. |
__new__
__new__(data, /, num_qubits=None)
のデフォルトコンストラクタは QubitSparsePauliList.
これは、 data の引数の型に基づいて、 明示的な変換コンストラクタ・メソッドのいずれかに委譲する。 num_qubits が与えられ、 data の型が暗示するコンストラクタが数値を受け付けない場合、与えられた整数は入力と一致しなければならない。
パラメーター
- data - 入力のデータ型。 これは別の
QubitSparsePauliListこの場合、入力はコピーされます。from_list()またはfrom_sparse_list(). - num_qubits (int|None) – リストの量子ビット数(オプション)。 ほとんどのデータ入力では、これは推測できるので、渡す必要はない。 これは空リストかスパース・リスト形式でのみ必要である。 不必要に与えられる場合は、入力されたデータと一致しなければならない。
変換ベースのコンストラクタに加えて、メソッド empty() は,与えられた数の量子ビットに作用する量子ビット・パース・ポーリスの空のリストを構築するために使用することができます。
変換
既存の QubitSparsePauliList を他のフォーマットに変換することができる。
メソッド | サマリー |
|---|---|
to_sparse_list() | 要素 (paulis, indices) を持つスパースリスト形式で観測値を表現する。 |
属性
num_qubits
リスト内の演算子が作用する量子ビットの数。
アイデンティティは明示的に保存されないため、これは他の形状や値からは推測できない。
num_terms
リストの要素数。
方法
apply_layout
apply_layout(layout, num_qubits=None)
この量子ビットスパースパウリリストにトランスパイラレイアウトを適用する。
これにより、例えばリストが仮想量子ビットラベルで定義されている場合、量子ビットインデックスの再マッピングが可能になる。
パラメーター
- layout (TranspileLayout |list[int] | None) – レイアウトを適用する。 この関数のほとんどの用途は、ハードウェア用にトランスパイルされた回路から
QuantumCircuit.layoutフィールドを渡すべきである。 さらに、新しい量子ビット・インデックスのリストを渡すこともできる。 明示的にNone、リマッピングは適用されない(ただし、num_qubits、リスト内の量子ビットを拡張することはできる)。 - num_qubits (int | None) – リスト要素を拡張する量子ビットの数。 もし与えなければ、出力は与えられた
TranspileLayoutと同じ幅になる。layoutが別の形式で与えられている場合は、入力と同じ幅になる。
戻り値
新しい QubitSparsePauli を作成し、提供されたレイアウトを適用します。
clear
clear()
リストからすべての要素を消去し、再び空のリストと同じにする。
これにより内部の割り当て容量は変更されないため、合成によって生じるその後の加算や減算の操作では、再割り当てが必要ない場合があります。
例
>>> pauli_list = QubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == QubitSparsePauliList.empty(pauli_list.num_qubits)copy
copy()
この量子ビット・スパース・パウリ・リストのコピーを手に入れよう。
例
>>> qubit_sparse_pauli_list = QubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert qubit_sparse_pauli_list == qubit_sparse_pauli_list.copy()
>>> assert qubit_sparse_pauli_list is not qubit_sparse_pauli_list.copy()empty
static empty(num_qubits)
指定された数の量子ビットの空のリストを取得する。
空リストは要素を含まず、2つのインスタンスを結合するための同一要素である。 QubitSparsePauliList インスタンスを結合するための同一要素です。
例
100量子ビットの空のリストを得る:
>>> QubitSparsePauliList.empty(100)
<QubitSparsePauliList with 0 elements on 100 qubits: []>from_label
static from_label(label, /)
密な文字列ラベルから単一項を持つリストを構築する。
ラベルはアルファベット 'IXYZ' の並びでなければならない。 ラベルはビット列と同様に解釈される。 つまり、一番右の文字が0番量子ビットに対応し、以下同様である。 のラベルと同じである。 Pauli と SparsePauliOp.
パラメーター
label (str) – 濃密なラベル。
例
>>> QubitSparsePauliList.from_label("IIIIXZI")
<QubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)複数のラベルからリストを作成するこのメソッドの一般化。
from_list
static from_list(iter, /, *, num_qubits=None)
密なラベルのリストから、量子ビット・スパース・パウリ・リストを構築する。
これは SparsePauliOp.from_list(). この密なフォームでは、各ラベルにすべてのIDを明示的に与えなければならない。
ラベルはアルファベット 'IXYZ' の並びでなければならない。 ラベルはビット列と同様に解釈される。 つまり、一番右の文字が0番量子ビットに対応し、以下同様である。 のラベルと同じである。 Pauli と SparsePauliOp.
パラメーター
- iter (list[str]) – 密な文字列ラベルのリスト。
- num_qubits (int | None) – ラベルの長さから推測できるので、
iterが空の配列でないことが確かならば、これを指定する必要はない。iterが空である可能性がある場合、演算子がいくつの量子ビットに作用するかを曖昧にするためにこの引数を指定しなければならない。 これが与えられ、iterが空でない場合、値はラベルの長さと一致しなければならない。
例
ラベルのリストから量子ビットスパースパウリリストを構築する:
>>> QubitSparsePauliList.from_list([
... "IIIXX",
... "IIYYI",
... "IXXII",
... "ZZIII",
... ])
<QubitSparsePauliList with 4 elements on 5 qubits:
[X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>num_qubits を使って、空の可能性のある入力を曖昧さをなくす:
>>> QubitSparsePauliList.from_list([], num_qubits=10)
<QubitSparsePauliList with 0 elements on 10 qubits: []>このメソッドは from_sparse_list() を呼び出すのと同じである:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_list明示的な同一性を持たず、各単一量子ビット演算子項が適用される量子ビットを明示的に列挙したラベルからリストを構築する。
from_pauli
static from_pauli(pauli, /)
を構築する。 QubitSparsePauliList インスタンスから Pauli インスタンスから構築する。
出力リストには1つの用語が含まれる。 位相が下がっていることに注意。
パラメーター
pauli (Pauli) – コンバートするシングル・パウリ。
例
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauliList.from_pauli(pauli)
<QubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)from_qubit_sparse_paulis
static from_qubit_sparse_paulis(obj, /, num_qubits=None)
を構築する。 QubitSparsePauliList 個々の QubitSparsePauli インスタンスから構成する。
すべての項は同じ数の量子ビットを持たなければならない。 指定された場合、 num_qubits 引数は条件と一致しなければならない。
パラメーター
- obj (Iterable[QubitSparsePauli]) – リストを作成する個々の用語を反復可能。
- num_qubits (int | None) – リストの要素が作用する量子ビットの数。 これは通常、入力から推測されるが、イテーブルが空の場合を処理するために明示的に指定することもできる。
戻り値
対応するリスト。
from_sparse_list
static from_sparse_list(iter, /, num_qubits)
ラベルのリストと各項目が適用される量子ビットから量子ビットスパースパウリリストを構築する。
これは SparsePauliOp.from_sparse_list().
タプルの "labels "フィールドと "indices "フィールドは、ジップすることで関連付けられる。 たとえば、これは from_list() の呼び出しは、各トリプルの "indices" フィールドを (num_qubits-1, ..., 1, 0) に設定することで、このメソッドで使用される形式に変換できることを意味します。
パラメーター
- iter (list[tuple[str, Sequence[int]]]) – ラベルのタプルと、それぞれの単一量子ビット項が適用される量子ビット。
- num_qubits (int) – リスト内の演算子が作用する量子ビットの数。
例
簡単なリストを作る:
>>> QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3))],
... num_qubits=5,
... )
<QubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, Y_3 Y_0]>このメソッドは from_list()もしタプルのqubit-argumentsフィールドが減少する整数に設定されていれば:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_listこの方法の逆。
to_dense_array
to_dense_array()
リストを密な配列形式で表現する。
各エントリーは u8 Pauli 行は異なるポーリを、列は異なる量子ビットを示す。
例
>>> paulis = QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3)), ("XX", (0, 1))],
... num_qubits=5,
... )
>>> paulis.to_dense_array()to_pauli_list
to_pauli_list()
を返す。 PauliList を返す。
to_sparse_list
to_sparse_list()
リストをスパース・リスト形式で表現する。
の逆演算と見なすことができる。 QubitSparsePauliList.from_sparse_list()しかし、スパース・リストへの往復の後では、項の順序が同じであることは保証されない。
例
>>> qubit_sparse_list = QubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = QubitSparsePauliList.from_sparse_list(qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)これらのリストを解釈できるコンストラクタ。