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')
베이스: NLocal
폴리 확장 회로.
폴리 확장 회로는 입력 데이터를 , 여기서 n은 feature_dimension 으로 변환하는 데이터 인코딩 회로입니다
여기서 은 기능 맵의 연결을 설명하는 쿼비트 인덱스 세트, 은 이 모든 인덱스 세트가 포함된 세트, 은 데이터 매핑입니다. 기본적으로 데이터 매핑 은
entanglement 및 paulis 인수를 사용하여 가능한 연결을 설정할 수 있습니다. 예를 들어, 모든 큐비트 쌍 간의 단일 큐비트 회전과 2큐비트 상호 작용을 설정할 수 있습니다:
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- 회전의 경우, 그리고 ZZFeatureMap 단일 큐비트 및 2큐비트 Pauli- 회전을 참조하세요.
예제
>>> 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).
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)
반복 rep_num 및 블록 block_num 에 대한 인탱글러 맵을 가져옵니다.
현재 블록의 인탱글러 맵은 self.entanglement 의 값에서 파생됩니다. 아래에는 다양한 사례가 나열되어 있으며, i 및 j 은 각각 반복 횟수와 블록 번호를, 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 값을 해당 인탱글러 맵으로 캐스팅할 수 없는 경우.
리턴 유형