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 인수를 사용하여 가능한 연결을 설정할 수 있습니다. 예를 들어, 모든 큐비트 쌍 간의 단일 큐비트 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 단일 큐비트 Pauli- ZZ 회전의 경우, 그리고 ZZFeatureMap 단일 큐비트 및 2큐비트 Pauli- ZZ 회전을 참조하세요.

예제

>>> 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] Havlicek et al. 양자 강화 특징 공간을 사용한 지도 학습, Nature 567, 209-212 (2019).

버전부터 사용되지 않음 2.1

qiskit.circuit.library.data_preparation.pauli_feature_map.PauliFeatureMap 클래스는 키스킷 2.1 에서 더 이상 사용되지 않습니다. 키스킷 3.0 에서 제거됩니다. 폴리_기능_맵 함수를 대신 사용하세요. 이렇게 하면 더 이상 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]Same as List[str]
Callable[int, List[List[int]]]Same as 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

주어진 폴리 문자열에 대한 진화 블록을 가져옵니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.