Skip to main content
IBM Quantum Platform
  • 이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.

    qiskit[all]~=2.5.2
    

Qiskit SDK 에서의 비트 순서 지정

nn 비트(또는 큐비트) 세트가 있는 경우 일반적으로 각 비트에 0n10 \rightarrow n-1 이라는 레이블을 붙입니다. 소프트웨어와 리소스마다 컴퓨터 메모리와 화면에 표시할 때 이러한 비트를 컴퓨터 메모리와 화면에 표시하는 방법을 선택해야 합니다.


Qiskit 관례

다음은 다양한 시나리오에서 키스킷 SDK가 비트를 주문하는 방식입니다.

양자 회로

QuantumCircuit 클래스는 큐비트를 목록에 저장합니다 (QuantumCircuit.qubits). 이 목록에 있는 큐비트의 인덱스는 큐비트의 레이블을 정의합니다.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit

qc = QuantumCircuit(2)
qc.qubits[0]  # qubit "0"

Qubit(QuantumRegister(2, "q"), 0)

Output:

<Qubit register=(2, "q"), index=0>

회로도

회로도에서 큐비트 00 는 가장 위에 있는 큐비트이고, 큐비트 n1n-1 는 가장 아래쪽 큐비트입니다. reverse_bits 인수를 사용하여 이를 변경할 수 있습니다 QuantumCircuit.draw ( 키스킷의 키스킷 ).

qc.x(1)
qc.draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

정수

비트를 숫자로 해석할 때 00 비트는 최하위 비트, 그리고 비트 n1n-1 가 가장 중요합니다. 이는 코딩할 때 유용합니다. 각 비트에는 다음과 같은 값이 있기 때문입니다 값 2label2^\text{label} (레이블은 큐비트의 인덱스인 QuantumCircuit.qubits). 예를 들어, 다음 회로 실행은 다음과 같이 끝납니다 비트 000, 비트 111 로 끝납니다. 이것은 다음과 같이 해석됩니다 십진수 2 (확률로 측정 1.0).

from qiskit.primitives import StatevectorSampler as Sampler

qc.measure_all()

job = Sampler().run([qc])
result = job.result()
print(f" > Counts: {result[0].data.meas.get_counts()}")

Output:

 > Counts: {'10': 1024}

문자열

비트(또는 큐비트) 목록을 문자열로 표시하거나 해석할 때 bit n1n-1 비트는 가장 왼쪽 비트이고 00 비트는 가장 오른쪽 비트입니다. 그 이유는 다음과 같습니다 는 일반적으로 가장 중요한 숫자가 왼쪽에 있는 숫자를 쓰기 때문에 키스킷에서는 n1n-1 비트가 가장 중요한 비트로 해석됩니다.

예를 들어, 다음 셀은 단일 큐비트 상태 문자열의 단일 큐비트 상태 문자열로 정의합니다. 이 경우, 쿼비트 00 는 상태 +|+\rangle, 그리고 qubit 11 상태 0|0\rangle.

from qiskit.quantum_info import Statevector

sv = Statevector.from_label("0+")
sv.probabilities_dict()

Output:

{np.str_('00'): np.float64(0.4999999999999999),
 np.str_('01'): np.float64(0.4999999999999999)}

이것은 때때로 비트 문자열을 해석할 때 혼란을 야기합니다 는 가장 왼쪽 비트가 비트 00 라고 예상할 수 있지만, 일반적으로는 비트 n1n-1.

상태벡터 행렬

상태 벡터를 복소수(진폭)의 목록으로 나타낼 때, 키스킷은 이러한 진폭을 정렬하여 인덱스 xx 의 진폭이 계산 기준 상태 x|x\rangle 를 나타냅니다.

print(sv[1])  # amplitude of state |01>
print(sv[2])  # amplitude of state |10>

Output:

(0.7071067811865475+0j)
0j

게이츠

키스킷의 각 게이트는 고유한 방식으로 큐비트 목록을 해석할 수 있습니다 제어 게이트는 일반적으로 (control, target) 규칙을 따릅니다.

예를 들어, 다음 셀은 제어-X 게이트를 추가하며, 여기서 쿼비트 00 는 가 제어이고 쿼비트 11 가 타깃입니다.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()

Output:

          
q_0: ──■──
     ┌─┴─┐
q_1: ┤ X ├
     └───┘

앞서 언급한 키스킷의 모든 규칙에 따라, 이 CX 게이트는 는 0111|01\rangle \leftrightarrow |11\rangle 변환을 수행하며, 따라서 매트릭스를 갖습니다.

(1000000100100100)\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ \end{pmatrix}

Qiskit에서 순서 변경

큐비트가 역순으로 있는 회로를 그리려면(즉, 아래쪽에 있는 큐비트 00 ) 아래)를 그리려면 reverse_bits 인수를 사용합니다. 이것은 생성된 다이어그램에만 영향을 미치며 다이어그램에만 영향을 미치며 회로에는 영향을 미치지 않습니다. X-게이트는 여전히 큐비트 00 에서 작동합니다.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)

Output:

          
q_1: ─────
     ┌───┐
q_0: ┤ X ├
     └───┘

reverse_bits 메서드를 사용하면 큐비트의 큐비트의 레이블이 반전된 새 회로를 반환합니다(원래 회로는 변경되지 않습니다).

qc.reverse_bits().draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

이 새로운 회로에서 X-게이트는 큐비트 11 에서 작동합니다.


다음 단계

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