이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
qiskit[all]~=2.5.2
Qiskit SDK 에서의 비트 순서 지정
비트(또는 큐비트) 세트가 있는 경우 일반적으로 각 비트에 이라는 레이블을 붙입니다. 소프트웨어와 리소스마다 컴퓨터 메모리와 화면에 표시할 때 이러한 비트를 컴퓨터 메모리와 화면에 표시하는 방법을 선택해야 합니다.
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>
회로도
회로도에서 큐비트 는 가장 위에 있는 큐비트이고, 큐비트 는 가장 아래쪽 큐비트입니다. reverse_bits 인수를 사용하여 이를 변경할 수 있습니다 QuantumCircuit.draw ( 키스킷의 키스킷 ).
qc.x(1)
qc.draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
정수
비트를 숫자로 해석할 때 비트는 최하위 비트, 그리고 비트 가 가장 중요합니다. 이는 코딩할 때 유용합니다. 각 비트에는 다음과 같은 값이 있기 때문입니다 값 (레이블은 큐비트의 인덱스인 QuantumCircuit.qubits). 예를 들어, 다음 회로 실행은 다음과 같이 끝납니다 비트 는 0, 비트 는 1 로 끝납니다. 이것은 다음과 같이 해석됩니다 십진수 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 비트는 가장 왼쪽 비트이고 비트는 가장 오른쪽 비트입니다. 그 이유는 다음과 같습니다 는 일반적으로 가장 중요한 숫자가 왼쪽에 있는 숫자를 쓰기 때문에 키스킷에서는 비트가 가장 중요한 비트로 해석됩니다.
예를 들어, 다음 셀은 단일 큐비트 상태 문자열의 단일 큐비트 상태 문자열로 정의합니다. 이 경우, 쿼비트 는 상태 , 그리고 qubit 상태 .
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)}
이것은 때때로 비트 문자열을 해석할 때 혼란을 야기합니다 는 가장 왼쪽 비트가 비트 라고 예상할 수 있지만, 일반적으로는 비트 .
상태벡터 행렬
상태 벡터를 복소수(진폭)의 목록으로 나타낼 때, 키스킷은 이러한 진폭을 정렬하여 인덱스 의 진폭이 계산 기준 상태 를 나타냅니다.
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>Output:
(0.7071067811865475+0j)
0j
게이츠
키스킷의 각 게이트는 고유한 방식으로 큐비트 목록을 해석할 수 있습니다 제어 게이트는 일반적으로 (control, target) 규칙을 따릅니다.
예를 들어, 다음 셀은 제어-X 게이트를 추가하며, 여기서 쿼비트 는 가 제어이고 쿼비트 가 타깃입니다.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()Output:
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
앞서 언급한 키스킷의 모든 규칙에 따라, 이 CX 게이트는 는 변환을 수행하며, 따라서 매트릭스를 갖습니다.
Qiskit에서 순서 변경
큐비트가 역순으로 있는 회로를 그리려면(즉, 아래쪽에 있는 큐비트 ) 아래)를 그리려면 reverse_bits 인수를 사용합니다. 이것은 생성된 다이어그램에만 영향을 미치며 다이어그램에만 영향을 미치며 회로에는 영향을 미치지 않습니다. X-게이트는 여전히 큐비트 에서 작동합니다.
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-게이트는 큐비트 에서 작동합니다.
다음 단계
- Grover의 알고리즘 튜토리얼에서 회로 사용 예시를 참조하세요.
- QuantumCircuit API 참조를 살펴보세요.