Skip to main content
IBM Quantum Platform

QubitSparsePauliList

class qiskit.quantum_info.QubitSparsePauliList(data, /, num_qubits=None)

GitHub

베이스: object

위상이 없는 폴리 연산자 목록이 큐비트-스페어 형식으로 저장됩니다.


표현

목록의 각 개별 폴리 연산자는 Ai(n){I,X,Y,Z}A^{(n)}_i \in \{I, X, Y, Z\} 의 경우 P=nAi(n)P = \bigotimes_n A^{(n)}_i 형식의 단일 큐비트 폴리 연산자의 텐서 곱입니다. 의 내부 표현은 QubitSparsePauliList 의 내부 표현은 비아이덴티티 단일 큐비트 폴리 연산자만 저장합니다. 이렇게 하면 많은 수의 큐비트에 가중치가 낮은 폴리 연산자 목록을 훨씬 더 효율적으로 표현할 수 있습니다. 예를 들어 수학`n`-큐비트 연산자 [Z(0),Z(n1)][Z^{(0)}, \dots Z^{(n-1)}], 여기서 Z(j)Z^{(j)} 은 큐비트에 ZZ 연산자 jj 및 그 외의 모든 연산자에 아이덴티티를 나타냅니다 QubitSparsePauliList 에 큐비트 수만큼의 선형 메모리 양으로 저장할 수 있습니다.

색인화

QubitSparsePauliListPython 시퀀스 (확장된 형식이 아닌 표준 형식인 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과 연관됩니다. 이것은 PauliSparsePauliOp.

매개변수

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

여러 레이블로 목록을 구성하는 이 메서드의 일반화입니다.

from_list

static from_list(iter, /, *, num_qubits=None)

밀도가 높은 레이블 목록에서 큐비트 스파스 폴리 목록을 구축합니다.

이것은 SparsePauliOp.from_list(). 이 밀도 높은 양식에서는 각 레이블에 모든 ID를 명시적으로 제공해야 합니다.

레이블은 알파벳 시퀀스여야 합니다 'IXYZ'. 레이블은 비트 문자열과 유사하게 해석됩니다. 즉, 가장 오른쪽에 있는 문자는 큐비트 0과 연관됩니다. 이것은 PauliSparsePauliOp.

매개변수

  • 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_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_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)
관련 참조

from_sparse_list()

이러한 목록을 해석할 수 있는 생성자입니다.

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