QubitSparsePauliList
class qiskit.quantum_info.QubitSparsePauliList(data, /, num_qubits=None)
베이스: object
위상이 없는 폴리 연산자 목록이 큐비트-스페어 형식으로 저장됩니다.
표현
목록의 각 개별 폴리 연산자는 의 경우 형식의 단일 큐비트 폴리 연산자의 텐서 곱입니다. 의 내부 표현은 QubitSparsePauliList 의 내부 표현은 비아이덴티티 단일 큐비트 폴리 연산자만 저장합니다. 이렇게 하면 많은 수의 큐비트에 가중치가 낮은 폴리 연산자 목록을 훨씬 더 효율적으로 표현할 수 있습니다. 예를 들어 수학`n`-큐비트 연산자 , 여기서 은 큐비트에 연산자 및 그 외의 모든 연산자에 아이덴티티를 나타냅니다 QubitSparsePauliList 에 큐비트 수만큼의 선형 메모리 양으로 저장할 수 있습니다.
색인화
QubitSparsePauliList 은 Python 시퀀스 (확장된 형식이 아닌 표준 형식인 collections.abc.Sequence). 목록의 요소는 정수로 인덱싱할 수 있을 뿐만 아니라 반복할 수도 있습니다. 인덱싱을 통해든 반복을 통해든 목록의 요소는 QubitSparsePauli 인스턴스로 반환됩니다.
생성
QubitSparsePauliList 는 여러 생성자를 정의합니다. 기본 생성자는 입력 유형에 따라 보다 구체적인 생성자 중 하나에 위임을 시도합니다. 언제든지 특정 생성자를 사용하여 구성을 더 잘 제어할 수 있습니다.
방법 | 요약 |
|---|---|
from_label() | 밀도가 높은 문자열 레이블을 단일 요소로 변환합니다 QubitSparsePauliList. |
from_list() | 조밀한 문자열 레이블 목록으로 구성합니다. |
from_sparse_list() | 희소 문자열 레이블의 튜플 목록과 해당 레이블이 적용되는 큐비트의 목록으로 제공되는 요소입니다. |
from_pauli() | 단일 엘리먼트를 Pauli 을 단일 요소로 QubitSparsePauliList. |
from_qubit_sparse_paulis() | 목록에서 구성 QubitSparsePaulis. |
__new__
__new__(data, /, num_qubits=None)
의 기본 생성자 QubitSparsePauliList.
이는 data 인수의 유형에 따라 명시적 변환 생성자 메서드 중 하나에 위임합니다. num_qubits 이 제공되고 data 유형이 암시하는 생성자가 숫자를 허용하지 않는 경우, 주어진 정수는 입력과 일치해야 합니다.
매개변수
- 데이터 - 입력의 데이터 유형입니다. 이것은 다른
QubitSparsePauliList일 수도 있고, 입력이 복사되는 경우 유효한 형식의 목록일 수도 있습니다from_list()또는from_sparse_list(). - num_qubits (int|None) – 목록에 대한 선택적 큐비트 수입니다. 대부분의 데이터 입력은 추론이 가능하므로 전달할 필요가 없습니다. 빈 목록 또는 희소 목록 형식에만 필요합니다. 불필요하게 주어진 경우 입력된 데이터와 일치해야 합니다.
변환 기반 생성자 외에도 메서드 empty() 메서드를 사용하여 주어진 수의 큐비트에 대해 작동하는 큐비트 스파스 폴리의 빈 목록을 구성할 수 있습니다.
변환
기존 QubitSparsePauliList 을 다른 형식으로 변환할 수 있습니다.
방법 | 요약 |
|---|---|
to_sparse_list() | 관찰 가능 항목을 요소와 함께 스파스 목록 형식으로 표현 (paulis, indices). |
속성
num_qubits
목록에 있는 연산자가 작동하는 큐비트 수입니다.
ID는 명시적으로 저장되지 않으므로 다른 모양이나 값으로 유추할 수 없습니다.
num_terms
목록에 있는 요소의 수입니다.
메소드
apply_layout
apply_layout(layout, num_qubits=None)
이 큐비트 스파스 폴리 리스트에 트랜스파일러 레이아웃을 적용합니다.
이를 통해 예를 들어 목록이 가상 큐비트 레이블로 정의된 경우 큐비트 인덱스의 리매핑이 가능합니다.
매개변수
- layout (TranspileLayout |list[int] | None) – 적용할 레이아웃. 이 함수를 사용할 때는 대부분 하드웨어용으로 트랜스파일링된 회로의 필드를
QuantumCircuit.layout전달해야 합니다. 또한, 새로운 큐비트 인덱스 목록을 전달할 수도 있습니다.None명시적으로 지정된 경우, 재매핑은 적용되지 않습니다(하지만 여전히 를num_qubits사용하여 목록에 있는 큐비트를 확장할 수는 있습니다). - num_qubits (int | None) – 목록 요소를 확장할 큐비트 수입니다. 제공되지 않으면 출력은 주어진 너비만큼(
TranspileLayout또는layout이 다른 형식으로 지정된 경우 입력과 같은 너비가 됩니다.
리턴
새로운 QubitSparsePauli 에 제공된 레이아웃을 적용합니다.
clear
clear()
목록에서 모든 요소를 지우고 다시 빈 목록과 동일하게 만듭니다.
이는 내부 할당 용량을 변경하지 않으므로, 조합으로 인해 발생하는 후속 덧셈 또는 뺄셈 연산 시 재할당이 필요하지 않을 수 있습니다.
예제
>>> pauli_list = QubitSparsePauliList.from_list(["IXXXYY", "ZZYZII"])
>>> pauli_list.clear()
>>> assert pauli_list == QubitSparsePauliList.empty(pauli_list.num_qubits)commutes
commutes(other)
self`의 원소들이 다른 큐비트의 스파스 파울리 목록과 교환 관계에 있는지 확인하십시오.
매개변수
other (QubitSparsePauliList) – 교환 관계를 확인하기 위한 큐비트 스파스 파울리 목록.
copy
copy()
이 큐비트 스파스 폴리 목록의 사본을 받으세요.
예제
>>> qubit_sparse_pauli_list = QubitSparsePauliList.from_list(["IXZXYYZZ", "ZXIXYYZZ"])
>>> assert qubit_sparse_pauli_list == qubit_sparse_pauli_list.copy()
>>> assert qubit_sparse_pauli_list is not qubit_sparse_pauli_list.copy()empty
static empty(num_qubits)
주어진 큐비트 수에 대한 빈 목록을 가져옵니다.
빈 목록은 요소를 포함하지 않으며, 두 인스턴스를 조인하기 위한 식별 요소입니다 QubitSparsePauliList 인스턴스를 결합하기 위한 식별 요소입니다.
예제
100개의 큐비트에서 빈 목록을 가져옵니다:
>>> QubitSparsePauliList.empty(100)
<QubitSparsePauliList with 0 elements on 100 qubits: []>from_label
static from_label(label, /)
밀도가 높은 문자열 레이블에서 단일 용어로 목록을 구성합니다.
레이블은 알파벳 시퀀스여야 합니다 'IXYZ'. 레이블은 비트 문자열과 유사하게 해석됩니다. 즉, 가장 오른쪽에 있는 문자는 큐비트 0과 연관됩니다. 이것은 Pauli 및 SparsePauliOp.
매개변수
label (str) – 밀도가 높은 레이블입니다.
예제
>>> QubitSparsePauliList.from_label("IIIIXZI")
<QubitSparsePauliList with 1 element on 7 qubits: [X_2 Z_1]>
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)여러 레이블로 목록을 구성하는 이 메서드의 일반화입니다.
from_list
static from_list(iter, /, *, num_qubits=None)
밀도가 높은 레이블 목록에서 큐비트 스파스 폴리 목록을 구축합니다.
이것은 SparsePauliOp.from_list(). 이 밀도 높은 양식에서는 각 레이블에 모든 ID를 명시적으로 제공해야 합니다.
레이블은 알파벳 시퀀스여야 합니다 'IXYZ'. 레이블은 비트 문자열과 유사하게 해석됩니다. 즉, 가장 오른쪽에 있는 문자는 큐비트 0과 연관됩니다. 이것은 Pauli 및 SparsePauliOp.
매개변수
- iter (list[str]) – 고밀도 문자열 레이블 목록입니다.
- num_qubits (int | None) –
iter이 빈 시퀀스가 아닌 것이 확실하다면 레이블 길이를 통해 유추할 수 있으므로 이를 지정할 필요가 없습니다.iter이 비어 있을 수 있는 경우, 이 인수를 지정하여 연산자가 작동하는 큐비트 수를 명확히 해야 합니다. 이 값이 주어지고iter이 비어 있지 않은 경우, 이 값은 레이블 길이와 일치해야 합니다.
예제
레이블 목록에서 큐비트 스파스 폴리 목록을 구축합니다:
>>> QubitSparsePauliList.from_list([
... "IIIXX",
... "IIYYI",
... "IXXII",
... "ZZIII",
... ])
<QubitSparsePauliList with 4 elements on 5 qubits:
[X_1 X_0, Y_2 Y_1, X_3 X_2, Z_4 Z_3]>num_qubits 을 사용하여 잠재적으로 비어 있을 수 있는 입력을 명확하게 구분하세요:
>>> QubitSparsePauliList.from_list([], num_qubits=10)
<QubitSparsePauliList with 0 elements on 10 qubits: []>이 메서드는 명시적 쿼비트 인자 필드를 감소하는 정수로 설정한 from_sparse_list() 에 대한 호출과 동일하며, 명시적 쿼비트 인자 필드가 감소하는 정수로 설정됩니다:
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_list명시적인 신원이 없는 레이블로 목록을 구성하되, 각 단일 큐비트 연산자 용어가 명시적으로 적용되는 큐비트를 사용하여 목록을 구성합니다.
from_pauli
static from_pauli(pauli, /)
를 구성합니다 QubitSparsePauliList 인스턴스를 Pauli 인스턴스를 생성합니다.
출력 목록에는 단일 용어가 표시됩니다. 위상이 삭제된다는 점에 유의하세요.
매개변수
pauli (Pauli) – 단일 폴리를 변환할 수 있습니다.
예제
>>> label = "IYXZI"
>>> pauli = Pauli(label)
>>> QubitSparsePauliList.from_pauli(pauli)
<QubitSparsePauliList with 1 element on 5 qubits: [Y_3 X_2 Z_1]>
>>> assert QubitSparsePauliList.from_label(label) == QubitSparsePauliList.from_pauli(pauli)from_qubit_sparse_paulis
static from_qubit_sparse_paulis(obj, /, num_qubits=None)
구성 QubitSparsePauliList 개별 QubitSparsePauli 인스턴스를 생성합니다.
모든 용어는 동일한 수의 큐비트를 가져야 합니다. 제공된 경우 num_qubits 인수는 조건과 일치해야 합니다.
매개변수
- obj (Iterable[QubitSparsePauli]) – 목록을 작성할 개별 용어의 반복 가능 항목입니다.
- num_qubits (int | None) – 목록의 요소가 작동해야 하는 큐비트 수입니다. 이는 일반적으로 입력에서 추론되지만, 빈 이터러블의 경우를 처리하기 위해 명시적으로 지정할 수 있습니다.
리턴
해당 목록입니다.
from_sparse_list
static from_sparse_list(iter, /, num_qubits)
레이블 목록과 각 항목에 적용되는 큐비트로 큐비트 스파스 폴리 목록을 구성합니다.
이것은 SparsePauliOp.from_sparse_list().
튜플의 '레이블' 및 '인덱스' 필드는 함께 압축하여 연결합니다. 예를 들어, 이것은 from_list() 호출은 각 트리플의 "인덱스" 필드를 (num_qubits-1, ..., 1, 0) 로 설정하여 이 메서드에서 사용하는 형식으로 변환할 수 있습니다.
매개변수
- iter (list[tuple[str, Sequence[int]]]) – 레이블의 튜플과 각 단일 큐비트 용어가 적용되는 큐비트입니다.
- num_qubits (int) – 목록의 연산자가 작동하는 큐비트 수입니다.
예제
간단한 목록을 작성합니다:
>>> QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3))],
... num_qubits=5,
... )
<QubitSparsePauliList with 2 elements on 5 qubits: [X_4 Z_1, Y_3 Y_0]>이 메서드는 다음과 같은 동작을 복제할 수 있습니다 from_list()의 동작을 복제할 수 있습니다(튜플의 큐비트 인자 필드가 감소하는 정수로 설정된 경우):
>>> labels = ["XYXZ", "YYZZ", "XYXZ"]
>>> from_list = QubitSparsePauliList.from_list(labels)
>>> from_sparse_list = QubitSparsePauliList.from_sparse_list([
... (label, (3, 2, 1, 0))
... for label in labels
... ])
>>> assert from_list == from_sparse_list이 방법의 반대입니다.
to_dense_array
to_dense_array()
목록을 고밀도 배열 형식으로 표현합니다.
각 항목은 u8 뒤에 Pauli 표현을 따르며, 행 인덱스는 폴리를, 열은 큐비트를 구분합니다.
예제
>>> paulis = QubitSparsePauliList.from_sparse_list(
... [("ZX", (1, 4)), ("YY", (0, 3)), ("XX", (0, 1))],
... num_qubits=5,
... )
>>> paulis.to_dense_array()to_pauli_list
to_pauli_list()
반환 PauliList 를 반환합니다.
to_sparse_list
to_sparse_list()
스파스 목록 형식으로 목록을 표현합니다.
의 반대 동작으로 볼 수 있습니다 QubitSparsePauliList.from_sparse_list()의 역연산으로 볼 수 있지만, 희소 목록으로 왕복한 후 다시 돌아올 때 용어의 순서가 동일하다고 보장되지는 않습니다.
예제
>>> qubit_sparse_list = QubitSparsePauliList.from_list(["IIXIZ", "IIZIX"])
>>> reconstructed = QubitSparsePauliList.from_sparse_list(qubit_sparse_list.to_sparse_list(), qubit_sparse_list.num_qubits)이러한 목록을 해석할 수 있는 생성자입니다.