SparsePauliOp
class qiskit.quantum_info.SparsePauliOp(data, coeffs=None, *, ignore_pauli_phase=False, copy=True)
ベース: LinearOp
パウリ基底表現のスパースN量子ビット演算子。
これはN量子ビット行列のスパース表現である。 Operator をN量子ビット PauliList と複素係数で表現したものです。
ゼロでないパウリ基底項の数が十分に少なければ、数百量子ビットの演算子演算に使用できる。
パウリ基底成分は PauliList オブジェクトとして格納され paulis 属性を使ってアクセスできる。 係数は複素数のNumpy配列ベクトルとして格納され、次の属性を使ってアクセスできる。 coeffs 属性を使ってアクセスできます。
係数のデータ型
coeffs Numpyの内部配列のデフォルト dtype は complex128。 ユーザーは、 np.ndarray に異なるd型を渡すことでこれを設定できる。 例えば、パラメータ化された SparsePauliOp は次のようにできる:
>>> import numpy as np
>>> from qiskit.circuit import ParameterVector
>>> from qiskit.quantum_info import SparsePauliOp>>> SparsePauliOp(["II", "XZ"], np.array(ParameterVector("a", 2)))
SparsePauliOp(['II', 'XZ'],
coeffs=[ParameterExpression(1.0*a[0]), ParameterExpression(1.0*a[1])])パラメータ化された SparsePauliOp は以下のメソッドをサポートしていない:
to_matrix(sparse=True)scipy.sparse、オブジェクトを要素として持つことはできないからだ。to_operator()なぜならOperatorはオブジェクトをサポートしていない。sortargsortParameterExpressionは比較をサポートしていない。equivなぜならParameterExpressionは複素数に変換できない。chopなぜならParameterExpressionは絶対値をサポートしていない。
演算子オブジェクトを初期化します。
パラメーター
-
data (PauliList orSparsePauliOp orPauli orlist orstr) – パウリの用語リスト パウリ文字列のリストまたはパウリ文字列も使用できる。
-
coeffs (np.ndarray) –
パウリ項の複素係数。
注dataがSparsePauliOpであり、coeffsがNoneでない場合、SparsePauliOp.coeffsの値は無視され、渡されたキーワード引数coeffsのみが使用される。 -
ignore_pauli_phase (bool) – 真の場合、指定された値のどの
phase成分もゼロPauliListであるとみなされます。 この方法は、この目的のためだけに構築されたPauliListがあり、かつZX表記法における位相がゼロであることがすでに分かっている場合に、より効率的です。 このオプションは、データをPauliList渡す際にのみ指定するのが適切です。 (デフォルト: False) -
copy (bool) – Trueの場合は入力データをコピーし、そうでない場合は可能であれば直接代入する。 (デフォルト: True)
レイズ
QiskitError - 入力データまたは係数が無効な場合。
属性
atol
デフォルト値: 1e-08
coeffs
パウリ係数を返す。
dim
タプル(input_shape, output_shape)を返す。
num_qubits
N量子ビット演算子の場合は量子ビット数を、それ以外の場合はNoneを返す。
parameters
係数中の自由な Parameters を返す。
paulis
PauliList を返す。
qargs
演算子の qargs を返す。
rtol
デフォルト値: 1e-05
settings
リターンの設定
size
演算子のパウリ項の数。
方法
adjoint
apply_layout
apply_layout(layout, num_qubits=None)
トランスパイラ・レイアウトを適用する SparsePauliOp
パラメーター
- layout (TranspileLayout |list[int] | None) – a
TranspileLayout、整数のリスト、またはNoneのいずれか。 layout と num_qubits の両方が none の場合、演算子のコピーが返されます。 - num_qubits (int | None) – 演算子を展開する量子ビットの数。 提供されない場合、
layoutがTranspileLayoutの場合、トランスパイラ出力回路の量子ビット数がデフォルトで使用されます。layoutが整数のリストの場合、指定された並べ替えは展開されずに適用される。 layoutがNoneの場合、演算子は与えられた量子ビット数に展開されます。
戻り値
新しい SparsePauliOp 提供されたレイアウトを適用した
戻りの型
argsort
argsort(weight=False)
テーブルの行をソートするためのインデックスを返す。
順列の合成を、係数によるソートとパウリによるソートの順に返します。 重みkwargを使うことで、出力はさらにPauliの中の非同一項の数でソートすることができる。
例
SparsePauliOp アルグソートの使用例である。
import numpy as np
from qiskit.quantum_info import SparsePauliOp
# 2-qubit labels
labels = ["XX", "XX", "XX", "YI", "II", "XZ", "XY", "XI"]
# coeffs
coeffs = [2.+1.j, 2.+2.j, 3.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j]
# init
spo = SparsePauliOp(labels, coeffs)
print('Initial Ordering')
print(spo)
# Lexicographic Ordering
srt = spo.argsort()
print('Lexicographically sorted')
print(srt)
# Lexicographic Ordering
srt = spo.argsort(weight=False)
print('Lexicographically sorted')
print(srt)
# Weight Ordering
srt = spo.argsort(weight=True)
print('Weight sorted')
print(srt)Initial Ordering
SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
coeffs=[2.+1.j, 2.+2.j, 3.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j])
Lexicographically sorted
[4 7 0 1 2 6 5 3]
Lexicographically sorted
[4 7 0 1 2 6 5 3]
Weight sorted
[4 7 3 0 1 2 6 5]パラメーター
- weight (bool) – オプションで、True の場合は重みでソートします (デフォルト: False)。
- sorted (By using the weight kwarg the output can additionally be)
- Pauli. (by the number of non-identity terms in the)
戻り値
テーブルをソートするためのインデックス。
戻りの型
assign_parameters
assign_parameters(parameters, inplace=False)
係数中の自由な Parameters を指定された値にバインドする。
回路のすべてのパラメータが数値にバインドされている場合、係数配列は complex で返される。
パラメーター
- parameters (Mapping[Parameter, complex |ParameterExpression] | Sequence[complex |ParameterExpression]) – パラメータをバインドする値。
- inplace (bool) –
Falseの場合、パラメータをバインドした演算子のコピーが返される。True、演算子自体が変更される。
戻り値
inplace が False の場合、パラメータがバインドされた演算子のコピー、そうでない場合は None。
戻りの型
SparsePauliOp | なし
chop
chop(tol=1e-14)
< tol 、係数の実数部と虚数部を0にする。
例えば、 1e-17 より大きな公差を持つ 1+1e-17j X + 1e-17 Y を表す演算子は、 1 X に縮小される。 SparsePauliOp.simplify() は 1+1e-17j X を返す。
切り捨て後に係数の実部と虚部の両方が0になった場合、その対応するパウリ演算子は演算子から削除される。
パラメーター
tol (float) – 実数部と虚数部のどちらを0にすべきかをチェックするための絶対許容差。
戻り値
この演算子は係数が刻まれている。
戻りの型
compose
compose(other, qargs=None, front=False)
別の SparsePauliOp との合成演算子を返す。
パラメーター
- other (SparsePauliOp) – SparsePauliOp オブジェクト。
- qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。
- front (bool) – Trueの場合、左掛け算ではなく右掛け算で合成する [:False].
戻り値
構成された SparsePauliOp。
戻りの型
レイズ
QiskitError - 他が演算子に変換できない場合、または指定されたサブシステムに対して互換性のない寸法を持つ場合。
conjugate
copy
dot
dot(other, qargs=None)
右掛け演算子 self * other を返す。
パラメーター
- other (Operator) – 演算子オブジェクト。
- qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。
戻り値
演算子を乗じた右行列。
戻りの型
ドット積は、 @ 二項演算子を用いて求めることができる。 したがって、 a.dot(b) は a @ b と等価である。
equiv
equiv(other, atol=None)
2つの SparsePauliOp 演算子が等価かどうかをチェックする。
パラメーター
- other (SparsePauliOp) – 演算子オブジェクト。
- atol (float | None) – 同等性をチェックするための絶対的な数値許容差。
戻り値
演算子が self と等価なら真。
戻りの型
expand
expand(other)
別の SparsePauliOp との逆順テンソル積を返す。
パラメーター
other (SparsePauliOp) – SparsePauliOp オブジェクト。
戻り値
テンソル積 。
は現在の SparsePauliOp,、 は他の SparsePauliOp。
戻りの型
from_list
static from_list(obj, dtype=None, *, num_qubits=None)
パウリ文字列と係数のリストから構築する。
例えば、5量子ビットのハミルトニアン
は次のように組み立てられる
from qiskit.quantum_info import SparsePauliOp
# via tuples and the full Pauli string
op = SparsePauliOp.from_list([("XIIZI", 1), ("IYIIY", 2)])パラメーター
- obj (Iterable[Tuple[str, complex]]) – パウリ項を指定する2タプルのリスト。
- dtype (type | None) – 係数のデータ型。 (
Noneデフォルトの場合)、データ型は自動的に推定されます。 - num_qubits (int) – 演算子の量子ビット数 (デフォルト: None)。
戻り値
パウリ項の SparsePauliOp 表現。
戻りの型
レイズ
- QiskitError - 空リストが渡され、num_qubitsがNoneの場合。
- QiskitError - num_qubitsと入力リストのオブジェクトが一致しない場合。
from_operator
static from_operator(obj, atol=None, rtol=None)
Operatorオブジェクトから生成する。
分解で可能なパウリ項の数は量子ビットの数に対して指数関数的であるため、この構成にかかるコストは一般に指数関数的であることに注意されたい。
内部的には、 Hantzko, Binkowski and Gupta (2023) で紹介されている「テンソル化パウリ分解」の実装を使用している。
パラメーター
- obj (Operator) – N量子ビット演算子。
- atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。 比較対象はゼロであるため、実質的に使用される公差は、
atolとrtolの最大値となる。 - rtol (float) – オプションだ。 係数がゼロかどうかをチェックするための相対許容誤差 (デフォルト: 1e-5 )。 比較対象はゼロであるため、実質的に使用される公差は、
atolとrtolの最大値となる。
戻り値
演算子の SparsePauliOp 表現。
戻りの型
レイズ
QiskitError - 入力演算子がN量子ビット演算子でない場合。
from_sparse_list
static from_sparse_list(obj, num_qubits, do_checks=True, dtype=None)
ローカルなパウリ文字列と係数のリストから構築する。
各リスト要素は、ローカルのパウリ文字列、それを適用するインデックス、係数の3タプルである。
例えば、5量子ビットのハミルトニアン
は次のように組み立てられる
from qiskit.quantum_info import SparsePauliOp
# via triples and local Paulis with indices
op = SparsePauliOp.from_sparse_list([("ZX", [1, 4], 1), ("YY", [0, 3], 2)], num_qubits=5)
# equals the following construction from "dense" Paulis
op = SparsePauliOp.from_list([("XIIZI", 1), ("IYIIY", 2)])パラメーター
- obj (Iterable[tuple[str, list[int], complex]]) – ポーリスを指定する3タプルのリスト。
- num_qubits (int) – 演算子の量子ビット数。
- do_checks (bool) – 入力インデックスに対して妥当性チェックを行うかどうか。
- dtype (type | None) – 係数のデータ型。 (
Noneデフォルトの場合)、データ型は自動的に推定されます。
戻り値
パウリ項の SparsePauliOp 表現。
戻りの型
レイズ
- QiskitError - もし量子ビットの数がパウリ項のインデックスと相容れない場合。
- QiskitError - 指定された量子ビットがすでに割り当てられている場合。
from_sparse_observable
static from_sparse_observable(obs)
からの初期化 SparseObservable.
A SparseObservable は( のような)固有状態プロジェクターを効率的に表現できるが、a SparsePauliOp は表現できない。 入力 obs が シングル量子ビットプロジェクターを持っている場合、その結果、 項を使うことになる。 SparsePauliOp は、 の項を使うことになる。これは指数関数的に高価な表現で、すぐにメモリ不足になってしまう。
パラメーター
obs (SparseObservable) – その SparseObservable を変換する。
戻り値
A SparsePauliOp 観測値のバージョン。
戻りの型
group_commuting
group_commuting(qubit_wise=False)
SparsePauliOp を、パウリ弦の通奏低音の集合に分割する。
パラメーター
qubit_wise (bool) –
整流則を演算子全体に適用するか、量子ビット単位で適用するか。 例:
>>> from qiskit.quantum_info import SparsePauliOp
>>> op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ",2j), ("ZZ",1j)])
>>> op.group_commuting()
[SparsePauliOp(["IZ", "ZZ"], coeffs=[0.+2.j, 0.+1j]),
SparsePauliOp(["XX", "YY"], coeffs=[2.+0.j, 1.+0.j])]
>>> op.group_commuting(qubit_wise=True)
[SparsePauliOp(['XX'], coeffs=[2.+0.j]),
SparsePauliOp(['YY'], coeffs=[1.+0.j]),
SparsePauliOp(['IZ', 'ZZ'], coeffs=[0.+2.j, 0.+1.j])]戻り値
SparsePauliOp のリスト。各 SparsePauliOp は以下を含む。
通勤パウリ作用素。
戻りの型
input_dims
is_unitary
is_unitary(atol=None, rtol=None)
演算子がユニタリー行列であれば真を返す。
このメソッドは、指定された許容誤差の範囲内で、隣接演算子と合成された演算子が恒等式と等しいかどうかをチェックする。 公差は、合成された演算子を簡略化し、その結果が恒等式であるかどうかをチェックするときに使用される。
パラメーター
- atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。
- rtol (float) – オプションだ。 係数がゼロかどうかをチェックする相対許容誤差 (デフォルト: 1e-5 )。
戻り値
演算子がユニタリーであれば真、そうでなければ偽。
戻りの型
label_iter
label_iter()
ラベル表現イテレータを返します。
これは、 SparsePauliOp の各項をタプル(label, coeff)に変換する遅延イテレータです。 テーブル全体をラベルに変換するには、 to_labels() メソッドを使用する。
戻り値
SparsePauliOp のラベル・イテレータ・オブジェクト。
戻りの型
LabelIterator
matrix_iter
matrix_iter(sparse=False)
行列表現イテレータを返します。
これは遅延イテレータで、 SparsePauliOp の各項が使われるたびに行列に変換される。 単一の行列に変換するには to_matrix() メソッドを使う。
パラメーター
sparse (bool) – Trueの場合、疎なCSR行列を返す。それ以外の場合はNumPy配列の行列を返す(デフォルト:False)
戻り値
の行列イテレータオブジェクト PauliList。
戻りの型
MatrixIterator
noncommutation_graph
noncommutation_graph(qubit_wise)
この SparsePauliOp の非整合グラフを作成する。
これにより、測定演算子のグルーピング問題は、グラフの色付け問題に変換される。 構築されたグラフには、各パウリに1つのノードが含まれる。 ノードは2つのパウリ項のうち、"commute "するもの同士をつなぐ。
パラメーター
qubit_wise (bool) – 整流則を演算子全体に適用するか、量子ビット単位で適用するか。
戻り値
各パウリのノードと辺を持つ非整合グラフ
非整合関係を示す。 各ノードは、そのデータで対応するパウリ項のインデックスを保持する。 グラフのエッジはデータを保持しない。
戻りの型
output_dims
power
power(n)
演算子をそれ自身と n 回組み合わせて返します。
パラメーター
n (int) – self ( n>0 ) と合成する回数。
戻り値
n回合成された演算子。
戻りの型
レイズ
QiskitError - 演算子の入力と出力の次元が等しくない場合、またはべき乗が正の整数でない場合。
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 - すべてのサブシステム入力次元またはサブシステム出力次元の合計サイズが一定でない場合。
simplify
simplify(atol=None, rtol=None)
重複を組み合わせたり、ゼロを取り除いたりして、 PauliList を簡略化する。
パラメーター
- atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。
- rtol (float) – オプションだ。 係数がゼロかどうかをチェックするための相対許容誤差 (デフォルト: 1e-5 )。
戻り値
簡易 SparsePauliOp 演算子。
戻りの型
sort
sort(weight=False)
テーブルの行を並べ替える。
numpyのargsortを使って係数をソートした後、Pauliでソートする。 パウリ・ソートが優先される。 パウリが同じなら、係数でソートされる。 重みkwargを使うことで、出力はさらにPauliの中の非同一項の数でソートすることができる。
例
SparsePauliOp ソートの使用例である。
import numpy as np
from qiskit.quantum_info import SparsePauliOp
# 2-qubit labels
labels = ["XX", "XX", "XX", "YI", "II", "XZ", "XY", "XI"]
# coeffs
coeffs = [2.+1.j, 2.+2.j, 3.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j]
# init
spo = SparsePauliOp(labels, coeffs)
print('Initial Ordering')
print(spo)
# Lexicographic Ordering
srt = spo.sort()
print('Lexicographically sorted')
print(srt)
# Lexicographic Ordering
srt = spo.sort(weight=False)
print('Lexicographically sorted')
print(srt)
# Weight Ordering
srt = spo.sort(weight=True)
print('Weight sorted')
print(srt)Initial Ordering
SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
coeffs=[2.+1.j, 2.+2.j, 3.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j, 7.+0.j])
Lexicographically sorted
SparsePauliOp(['II', 'XI', 'XX', 'XX', 'XX', 'XY', 'XZ', 'YI'],
coeffs=[4.+0.j, 7.+0.j, 2.+1.j, 2.+2.j, 3.+0.j, 6.+0.j, 5.+0.j, 3.+0.j])
Lexicographically sorted
SparsePauliOp(['II', 'XI', 'XX', 'XX', 'XX', 'XY', 'XZ', 'YI'],
coeffs=[4.+0.j, 7.+0.j, 2.+1.j, 2.+2.j, 3.+0.j, 6.+0.j, 5.+0.j, 3.+0.j])
Weight sorted
SparsePauliOp(['II', 'XI', 'YI', 'XX', 'XX', 'XX', 'XY', 'XZ'],
coeffs=[4.+0.j, 7.+0.j, 3.+0.j, 2.+1.j, 2.+2.j, 3.+0.j, 6.+0.j, 5.+0.j])パラメーター
- weight (bool) – オプションで、True の場合は重みでソートします (デフォルト: False)。
- sorted (By using the weight kwarg the output can additionally be)
- Pauli. (by the number of non-identity terms in the)
戻り値
元のテーブルのソートされたコピー。
戻りの型
sum
static sum(ops)
SparsePauliOps の合計。
これは、 SparsePauliOp の組み込み関数 sum に特化し、オーバーヘッドを小さくしたものである。
パラメーター
ops (list[SparsePauliOp]) – SparsePauliOps のリスト。
戻り値
入力リストの合計を表す SparsePauliOp。
戻りの型
レイズ
- QiskitError - 入力リストが空の場合。
- QiskitError - 入力リストに SparsePauliOp でないオブジェクトが含まれている場合。
- QiskitError - 入力リストのオブジェクトの量子ビット数が一致しない場合。
tensor
tensor(other)
別の SparsePauliOp とのテンソル積を返す。
パラメーター
other (SparsePauliOp) – SparsePauliOp オブジェクト。
戻り値
テンソル積 。
は現在の SparsePauliOp,、 は他の SparsePauliOp。
戻りの型
テンソル積は、 ^ 二項演算子を用いて求めることができる。 したがって、 a.tensor(b) は a ^ b と等価である。
to_list
to_list(array=False)
パウリ文字列のラベルと係数のリストに変換する。
多くの項を持つ演算子の場合、 array=True kwargを使用すると、ラベルの完全なNumpy配列のメモリを事前に確保するため、より効率的です。
パラメーター
array (bool) – TrueならNumpyの配列を返し、そうでなければリストを返す(デフォルト:False)。
戻り値
PauliList の行のペア(label, coeff)のリスト。
戻りの型
to_matrix
to_matrix(sparse=False, force_serial=False)
密行列または疎行列に変換する。
パラメーター
- sparse (bool) –
Trueの場合は疎なCSR行列を返し、そうでない場合は密なNumpy配列(デフォルト)を返す。 - force_serial (bool) –
Trueの場合は、 Qiskit のスレッド制御環境変数の状態に関係なく、 スレッド化されていない実装を使用します。 デフォルトでは、利用可能なCPU上でスレッド並列処理が行われる。
戻り値
sparse=False の場合は密行列. csr_matrix:sparse=True の場合、CSR 形式の疎行列。
戻りの型