Skip to main content
IBM Quantum Platform

PauliFeatureMap

class qiskit.circuit.library.PauliFeatureMap(feature_dimension=None, reps=2, entanglement='full', alpha=2.0, paulis=None, data_map_func=None, parameter_prefix='x', insert_barriers=False, name='PauliFeatureMap')

GitHub

ベース: NLocal

パウリ拡大回路。

パウリ展開回路は、入力データ xRn\vec{x} \in \mathbb{R}^n (nは feature_dimension )を次のように変換するデータ符号化回路である

UΦ(x)=exp(iSIϕS(x)iSPi).U_{\Phi(\vec{x})}=\exp\left(i\sum_{S \in \mathcal{I}} \phi_S(\vec{x})\prod_{i\in S} P_i\right).

ここで、 SS は、特徴マップの接続を記述する量子ビットインデックスの集合であり、 I\mathcal{I} は、これらのインデックス集合をすべて含む集合であり、 Pi{I,X,Y,Z}P_i \in \{I, X, Y, Z\} は、特徴マップの接続を記述する量子ビットインデックスの集合である。デフォルトでは、データマッピング ϕS\phi_S

ϕS(x)={xi if S={i}jS(πxj) if S>1.\phi_S(\vec{x}) = \begin{cases} x_i \text{ if } S = \{i\} \\ \prod_{j \in S} (\pi - x_j) \text{ if } |S| > 1 \end{cases}.

可能な接続は、 entanglementpaulis の引数で設定できる。 例えば、1量子ビットの ZZ 回転と、すべての量子ビットペア間の2量子ビット YYYY 相互作用については、次のように設定できる:

feature_map = PauliFeatureMap(..., paulis=["Z", "YY"], entanglement="full")

という形のブロックを生成する

┌───┐┌─────────────┐┌──────────┐                                            ┌───────────┐
┤ H ├┤ P(2.0*x[0]) ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2) ├
├───┤├─────────────┤├──────────┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───────────┤
┤ H ├┤ P(2.0*x[1]) ├┤ RX(pi/2) ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ RX(-pi/2) ├
└───┘└─────────────┘└──────────┘└───┘└────────────────────────────────┘└───┘└───────────┘

回路はこの変換を reps

を参照されたい。 ZFeatureMap を、1量子ビットPauli- ZZ 回転の場合は ZZFeatureMapZZ を参照されたい。

>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZZ'])
>>> print(prep.decompose())
     ┌───┐
q_0: ┤ H ├──■──────────────────────────────────────■──
     ├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐
q_1: ┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
     └───┘└───┘└────────────────────────────────┘└───┘
>>> prep = PauliFeatureMap(2, reps=1, paulis=['Z', 'XX'])
>>> print(prep.decompose())
     ┌───┐┌─────────────┐┌───┐                                            ┌───┐
q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ H ├──■──────────────────────────────────────■──┤ H ├
     ├───┤├─────────────┤├───┤┌─┴─┐┌────────────────────────────────┐┌─┴─┐├───┤
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ H ├┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├┤ H ├
     └───┘└─────────────┘└───┘└───┘└────────────────────────────────┘└───┘└───┘
>>> prep = PauliFeatureMap(2, reps=1, paulis=['ZY'])
>>> print(prep.decompose())
     ┌───┐┌──────────┐                                            ┌───────────┐
q_0: ┤ H ├┤ RX(pi/2) ├──■──────────────────────────────────────■──┤ RX(-pi/2)
     ├───┤└──────────┘┌─┴─┐┌────────────────────────────────┐┌─┴─┐└───────────┘
q_1: ┤ H ├────────────┤ X ├┤ P(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├─────────────
     └───┘            └───┘└────────────────────────────────┘└───┘
>>> from qiskit.circuit.library import EfficientSU2
>>> prep = PauliFeatureMap(3, reps=3, paulis=['Z', 'YY', 'ZXZ'])
>>> wavefunction = EfficientSU2(3)
>>> classifier = prep.compose(wavefunction)
>>> classifier.num_parameters
27
>>> classifier.count_ops()
OrderedDict([('cx', 39), ('rx', 36), ('u1', 21), ('h', 15), ('ry', 12), ('rz', 12)])

参照資料:

[1] ハブリチェックら 量子拡張特徴空間を用いた教師あり学習, Nature 567, 209-212 (2019 ).

バージョンから非推奨 2.1

クラス qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap は Qiskit 2.1 で非推奨となりました。 Qiskit 3.0 で削除されます。 pauli_feature_map関数を代替として使用する。 これはもはや BlueprintCircuit, を返すのではなく、単なる QuantumCircuit を返すことに注意してください。

パラメーター

  • feature_dimension (int | None) – 回路内の量子ビット数。
  • reps (int) – 進化レイヤーが繰り返される回数。
  • entanglement (str |dict[int, list[tuple[int]]] | Callable[[int], str |dict[int, list[tuple[int]]]]) – エンタングルメント構造を指定します。 文字列('full', 'linear', 'reverse_linear', 'circular' または 'sca')であるか、キーが量子ビットの数を表し、値が互いに量子もつれ状態にある量子ビットのインデックスを指定する整数のペアのリストである辞書であることができます。例えば: {1: [(0,), (2,)], 2: [(0,1), (2,0)]} または、反復ごとに固有の量子もつれ状態を Callable[[int], Union[str | Dict[...]]] 返すための であることもあります
  • alpha (float) – パウリ回転に乗じるパウリ回転係数
  • paulis (list[str] | None) – 今後使用されるパウリ演算子の文字列一覧。 指定がない場合は、 ['Z', 'ZZ'] が使用されます。
  • data_map_func (Callable[[np.ndarray], float] | None) – デフォルトのマッピングを上書きするために指定できる、 x データ用のマッピング関数。
  • parameter_prefix (str) – デフォルトのパラメータが生成される場合に使用する接頭辞。
  • insert_barriers (bool) – その場合 True、進化指令とアダマール層の間に障壁が挿入される。
  • name (str) – 回路名。

属性

alpha

パウリ回転因子(アルファ)。

戻り値

パウリ回転因子。

entanglement_blocks

エンタングルメント層のブロック。

戻り値

エンタングルメント層のブロック。

feature_dimension

特徴次元(これは量子ビット数に等しい)を返す。

戻り値

このフィーチャーマップのフィーチャディメンション。

num_parameters_settable

パラメータの数。

paulis

量子ビットのエンタングルメントに使われるパウリ文字列。

戻り値

リストとしてのパウリ弦。

name

タイプ: str

人間が読める回路名。

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit

方法

get_entangler_map

get_entangler_map(rep_num, block_num, num_block_qubits)

GitHub

rep_num とブロック block_num の繰り返しでエンタングラー・マップを得る。

現在のブロックのエンタングラー・マップは、 self.entanglement の値から導き出される。 ij はそれぞれ繰り返し番号とブロック番号を表し、 n はブロック内の量子ビット数を表す。

もつれタイプ
エンタングラー・マップ
None[[0, ..., n - 1]]
str (例 'full'指定された量子ビット n 間の接続
List[int][entanglement]
List[List[int]]entanglement
List[List[List[int]]]entanglement[i]
List[List[List[List[int]]]]entanglement[i][j]
List[str]に規定されている接続性 entanglement[i]
List[List[str]]に規定されている接続性 entanglement[i][j]
Callable[int, str]同じ List[str]
Callable[int, List[List[int]]]同じ List[List[List[int]]]

すべてのインデックスは、それが作用する配列の長さのモジュロとして取られることに注意してください。

パラメーター

  • rep_num (int) – 今、私たちが繰り返していること。
  • block_num (int) – エンタングルメント層内のブロック番号。
  • num_block_qubits (int) – ブロック内の量子ビット数。

戻り値

現在の反復における現在のブロックのエンタングラー・マップ。

レイズ

ValueError - entanglement の値が対応するエンタングラー・マップにキャストできなかった場合。

戻りの型

シーケンス[* シーケンス*[ int ]]

pauli_block

pauli_block(pauli_string)

GitHub

フィーチャーマップ回路のパウリブロックを取得する。

pauli_evolution

pauli_evolution(pauli_string, time)

GitHub

与えられた pauli 文字列の進化ブロックを取得する。

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