Skip to main content
IBM Quantum Platform

SparsePauliOp

class qiskit.quantum_info.SparsePauliOp(data, coeffs=None, *, ignore_pauli_phase=False, copy=True)

GitHub

ベース: LinearOp

パウリ基底表現のスパースN量子ビット演算子。

これはN量子ビット行列のスパース表現である。 Operator をN量子ビット PauliList と複素係数で表現したものです。

ゼロでないパウリ基底項の数が十分に少なければ、数百量子ビットの演算子演算に使用できる。

パウリ基底成分は PauliList オブジェクトとして格納され paulis 属性を使ってアクセスできる。 係数は複素数のNumpy配列ベクトルとして格納され、次の属性を使ってアクセスできる。 coeffs 属性を使ってアクセスできます。

係数のデータ型

coeffs Numpyの内部配列のデフォルト dtypecomplex128。 ユーザーは、 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 はオブジェクトをサポートしていない。
  • sort argsort ParameterExpression は比較をサポートしていない。
  • equiv なぜなら ParameterExpression は複素数に変換できない。
  • chop なぜなら ParameterExpression は絶対値をサポートしていない。

演算子オブジェクトを初期化します。

パラメーター

  • data (PauliList orSparsePauliOp orPauli orlist orstr) – パウリの用語リスト パウリ文字列のリストまたはパウリ文字列も使用できる。

  • coeffs (np.ndarray) –

    パウリ項の複素係数。

    dataSparsePauliOp であり、 coeffsNone でない場合、 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

adjoint()

GitHub

演算子の随伴点を返します。

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

トランスパイラ・レイアウトを適用する SparsePauliOp

パラメーター

  • layout (TranspileLayout |list[int] | None) – a TranspileLayout、整数のリスト、またはNoneのいずれか。 layout と num_qubits の両方が none の場合、演算子のコピーが返されます。
  • num_qubits (int | None) – 演算子を展開する量子ビットの数。 提供されない場合、 layoutTranspileLayout の場合、トランスパイラ出力回路の量子ビット数がデフォルトで使用されます。 layout が整数のリストの場合、指定された並べ替えは展開されずに適用される。 layoutがNoneの場合、演算子は与えられた量子ビット数に展開されます。

戻り値

新しい SparsePauliOp 提供されたレイアウトを適用した

戻りの型

SparsePauliOp

argsort

argsort(weight=False)

GitHub

テーブルの行をソートするためのインデックスを返す。

順列の合成を、係数によるソートとパウリによるソートの順に返します。 重み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)

GitHub

係数中の自由な Parameters を指定された値にバインドする。

回路のすべてのパラメータが数値にバインドされている場合、係数配列は complex で返される。

パラメーター

戻り値

inplaceFalse の場合、パラメータがバインドされた演算子のコピー、そうでない場合は None

戻りの型

SparsePauliOp | なし

chop

chop(tol=1e-14)

GitHub

< tol 、係数の実数部と虚数部を0にする。

例えば、 1e-17 より大きな公差を持つ 1+1e-17j X + 1e-17 Y を表す演算子は、 1 X に縮小される。 SparsePauliOp.simplify()1+1e-17j X を返す。

切り捨て後に係数の実部と虚部の両方が0になった場合、その対応するパウリ演算子は演算子から削除される。

パラメーター

tol (float) – 実数部と虚数部のどちらを0にすべきかをチェックするための絶対許容差。

戻り値

この演算子は係数が刻まれている。

戻りの型

SparsePauliOp

compose

compose(other, qargs=None, front=False)

GitHub

別の SparsePauliOp との合成演算子を返す。

パラメーター

  • other (SparsePauliOp) – SparsePauliOp オブジェクト。
  • qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。
  • front (bool) – Trueの場合、左掛け算ではなく右掛け算で合成する [:False].

戻り値

構成された SparsePauliOp。

戻りの型

SparsePauliOp

レイズ

QiskitError - 他が演算子に変換できない場合、または指定されたサブシステムに対して互換性のない寸法を持つ場合。

デフォルトでは、合成(&)は行列演算子の左行列乗算として定義され、 @ (と等価) は右行列乗算として定義される。 dot()) は右行列乗算として定義されます。 つまり、 AB が同じ型である場合、 A & B == A.compose(B)B @ A == B.dot(A) と等価である。

front=True kwargを設定すると、これは右行列の乗算に変わり、以下のメソッドと同等になる。 dot() メソッド A.dot(B) == A.compose(B, front=True) と等価である。

conjugate

conjugate()

GitHub

SparsePauliOp の共役を返す。

copy

copy()

GitHub

現在のオペレータのディープコピーを作成する。

dot

dot(other, qargs=None)

GitHub

右掛け演算子 self * other を返す。

パラメーター

  • other (Operator) – 演算子オブジェクト。
  • qargs (list or None) – 他の処理を適用するサブシステムの位置のリスト。 すべてのサブシステムに「None」が適用される場合(デフォルト:None)。

戻り値

演算子を乗じた右行列。

戻りの型

オペレーター

ドット積は、 @ 二項演算子を用いて求めることができる。 したがって、 a.dot(b)a @ b と等価である。

equiv

equiv(other, atol=None)

GitHub

2つの SparsePauliOp 演算子が等価かどうかをチェックする。

パラメーター

  • other (SparsePauliOp) – 演算子オブジェクト。
  • atol (float | None) – 同等性をチェックするための絶対的な数値許容差。

戻り値

演算子が self と等価なら真。

戻りの型

bool

expand

expand(other)

GitHub

別の SparsePauliOp との逆順テンソル積を返す。

パラメーター

other (SparsePauliOp) – SparsePauliOp オブジェクト。

戻り値

テンソル積 bab \otimes aaa

は現在の SparsePauliOp,、 bb は他の SparsePauliOp。

戻りの型

SparsePauliOp

from_list

static from_list(obj, dtype=None, *, num_qubits=None)

GitHub

パウリ文字列と係数のリストから構築する。

例えば、5量子ビットのハミルトニアン

H=Z1X4+2Y0Y3H = Z_1 X_4 + 2 Y_0 Y_3

は次のように組み立てられる

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 表現。

戻りの型

SparsePauliOp

レイズ

  • QiskitError - 空リストが渡され、num_qubitsがNoneの場合。
  • QiskitError - num_qubitsと入力リストのオブジェクトが一致しない場合。

from_operator

static from_operator(obj, atol=None, rtol=None)

GitHub

Operatorオブジェクトから生成する。

分解で可能なパウリ項の数は量子ビットの数に対して指数関数的であるため、この構成にかかるコストは一般に指数関数的であることに注意されたい。

内部的には、 Hantzko, Binkowski and Gupta (2023) で紹介されている「テンソル化パウリ分解」の実装を使用している。

パラメーター

  • obj (Operator) – N量子ビット演算子。
  • atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。 比較対象はゼロであるため、実質的に使用される公差は、 atolrtol の最大値となる。
  • rtol (float) – オプションだ。 係数がゼロかどうかをチェックするための相対許容誤差 (デフォルト: 1e-5 )。 比較対象はゼロであるため、実質的に使用される公差は、 atolrtol の最大値となる。

戻り値

演算子の SparsePauliOp 表現。

戻りの型

SparsePauliOp

レイズ

QiskitError - 入力演算子がN量子ビット演算子でない場合。

from_sparse_list

static from_sparse_list(obj, num_qubits, do_checks=True, dtype=None)

GitHub

ローカルなパウリ文字列と係数のリストから構築する。

各リスト要素は、ローカルのパウリ文字列、それを適用するインデックス、係数の3タプルである。

例えば、5量子ビットのハミルトニアン

H=Z1X4+2Y0Y3H = Z_1 X_4 + 2 Y_0 Y_3

は次のように組み立てられる

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 表現。

戻りの型

SparsePauliOp

レイズ

  • QiskitError - もし量子ビットの数がパウリ項のインデックスと相容れない場合。
  • QiskitError - 指定された量子ビットがすでに割り当てられている場合。

from_sparse_observable

static from_sparse_observable(obs)

GitHub

からの初期化 SparseObservable.

警告

A SparseObservable は( 00|0\langle\rangle 0| のような)固有状態プロジェクターを効率的に表現できるが、a SparsePauliOp表現できない。 入力 obsnn シングル量子ビットプロジェクターを持っている場合、その結果、 項を使うことになる。 SparsePauliOp は、 2n2^n の項を使うことになる。これは指数関数的に高価な表現で、すぐにメモリ不足になってしまう。

パラメーター

obs (SparseObservable) – その SparseObservable を変換する。

戻り値

A SparsePauliOp 観測値のバージョン。

戻りの型

SparsePauliOp

group_commuting

group_commuting(qubit_wise=False)

GitHub

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 は以下を含む。

通勤パウリ作用素。

戻りの型

リスト SparsePauliOp ]

input_dims

input_dims(qargs=None)

GitHub

指定されたサブシステムの入力次元のタプルを返す。

is_unitary

is_unitary(atol=None, rtol=None)

GitHub

演算子がユニタリー行列であれば真を返す。

このメソッドは、指定された許容誤差の範囲内で、隣接演算子と合成された演算子が恒等式と等しいかどうかをチェックする。 公差は、合成された演算子を簡略化し、その結果が恒等式であるかどうかをチェックするときに使用される。

パラメーター

  • atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。
  • rtol (float) – オプションだ。 係数がゼロかどうかをチェックする相対許容誤差 (デフォルト: 1e-5 )。

戻り値

演算子がユニタリーであれば真、そうでなければ偽。

戻りの型

bool

label_iter

label_iter()

GitHub

ラベル表現イテレータを返します。

これは、 SparsePauliOp の各項をタプル(label, coeff)に変換する遅延イテレータです。 テーブル全体をラベルに変換するには、 to_labels() メソッドを使用する。

戻り値

SparsePauliOp のラベル・イテレータ・オブジェクト。

戻りの型

LabelIterator

matrix_iter

matrix_iter(sparse=False)

GitHub

行列表現イテレータを返します。

これは遅延イテレータで、 SparsePauliOp の各項が使われるたびに行列に変換される。 単一の行列に変換するには to_matrix() メソッドを使う。

パラメーター

sparse (bool) – Trueの場合、疎なCSR行列を返す。それ以外の場合はNumPy配列の行列を返す(デフォルト:False)

戻り値

の行列イテレータオブジェクト PauliList。

戻りの型

MatrixIterator

noncommutation_graph

noncommutation_graph(qubit_wise)

GitHub

この SparsePauliOp の非整合グラフを作成する。

これにより、測定演算子のグルーピング問題は、グラフの色付け問題に変換される。 構築されたグラフには、各パウリに1つのノードが含まれる。 ノードは2つのパウリ項のうち、"commute "するもの同士をつなぐ。

パラメーター

qubit_wise (bool) – 整流則を演算子全体に適用するか、量子ビット単位で適用するか。

戻り値

各パウリのノードと辺を持つ非整合グラフ

非整合関係を示す。 各ノードは、そのデータで対応するパウリ項のインデックスを保持する。 グラフのエッジはデータを保持しない。

戻りの型

rustworkx.PyGraph

output_dims

output_dims(qargs=None)

GitHub

指定されたサブシステムの出力次元のタプルを返す。

power

power(n)

GitHub

演算子をそれ自身と n 回組み合わせて返します。

パラメーター

n (int) – self ( n>0 ) と合成する回数。

戻り値

n回合成された演算子。

戻りの型

Clifford

レイズ

QiskitError - 演算子の入力と出力の次元が等しくない場合、またはべき乗が正の整数でない場合。

reshape

reshape(input_dims=None, output_dims=None, num_qubits=None)

GitHub

入出力サブシステムの寸法を変更した浅いコピーを返す。

パラメーター

  • 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)

GitHub

重複を組み合わせたり、ゼロを取り除いたりして、 PauliList を簡略化する。

パラメーター

  • atol (float) – オプションだ。 係数がゼロかどうかをチェックするための絶対許容誤差 (デフォルト: 1e-8 )。
  • rtol (float) – オプションだ。 係数がゼロかどうかをチェックするための相対許容誤差 (デフォルト: 1e-5 )。

戻り値

簡易 SparsePauliOp 演算子。

戻りの型

SparsePauliOp

sort

sort(weight=False)

GitHub

テーブルの行を並べ替える。

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)

戻り値

元のテーブルのソートされたコピー。

戻りの型

SparsePauliOp

sum

static sum(ops)

GitHub

SparsePauliOps の合計。

これは、 SparsePauliOp の組み込み関数 sum に特化し、オーバーヘッドを小さくしたものである。

パラメーター

ops (list[SparsePauliOp]) – SparsePauliOps のリスト。

戻り値

入力リストの合計を表す SparsePauliOp。

戻りの型

SparsePauliOp

レイズ

  • QiskitError - 入力リストが空の場合。
  • QiskitError - 入力リストに SparsePauliOp でないオブジェクトが含まれている場合。
  • QiskitError - 入力リストのオブジェクトの量子ビット数が一致しない場合。

tensor

tensor(other)

GitHub

別の SparsePauliOp とのテンソル積を返す。

パラメーター

other (SparsePauliOp) – SparsePauliOp オブジェクト。

戻り値

テンソル積 aba \otimes baa

は現在の SparsePauliOp,、 bb は他の SparsePauliOp。

戻りの型

SparsePauliOp

テンソル積は、 ^ 二項演算子を用いて求めることができる。 したがって、 a.tensor(b)a ^ b と等価である。

to_list

to_list(array=False)

GitHub

パウリ文字列のラベルと係数のリストに変換する。

多くの項を持つ演算子の場合、 array=True kwargを使用すると、ラベルの完全なNumpy配列のメモリを事前に確保するため、より効率的です。

パラメーター

array (bool) – TrueならNumpyの配列を返し、そうでなければリストを返す(デフォルト:False)。

戻り値

PauliList の行のペア(label, coeff)のリスト。

戻りの型

リストまたは配列

to_matrix

to_matrix(sparse=False, force_serial=False)

GitHub

密行列または疎行列に変換する。

パラメーター

  • sparse (bool) – True の場合は疎なCSR行列を返し、そうでない場合は密なNumpy配列(デフォルト)を返す。
  • force_serial (bool) – True の場合は、 Qiskit のスレッド制御環境変数の状態に関係なく、 スレッド化されていない実装を使用します。 デフォルトでは、利用可能なCPU上でスレッド並列処理が行われる。

戻り値

sparse=False の場合は密行列. csr_matrix:sparse=True の場合、CSR 形式の疎行列。

戻りの型

アレイ

to_operator

to_operator()

GitHub

行列演算子オブジェクトへの変換

戻りの型

オペレーター

to_sparse_list

to_sparse_list()

GitHub

要素(pauli, qubits, coefficient)を持つスパースパウリリスト形式に変換。

transpose

transpose()

GitHub

SparsePauliOp の転置行列を返す。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。