Lumaktaw sa pangunahing nilalaman

Bit-ordering sa Qiskit SDK

Mga bersyon ng package

Ang code sa pahinang ito ay ginawa gamit ang mga sumusunod na kinakailangan. Inirerekomenda naming gamitin ang mga bersyong ito o mas bago pa.

qiskit[all]~=2.3.0

Kung mayroon kang hanay ng nn bits (o qubits), karaniwang ina-label ang bawat bit mula 0β†’nβˆ’10 \rightarrow n-1. Ang iba't ibang software at mapagkukunan ay kailangang pumili kung paano nila i-order ang mga bit na ito sa memory ng computer at kapag ipinapakita sa screen.

Mga convention ng Qiskit​

Narito kung paano ini-order ng Qiskit SDK ang mga bits sa iba't ibang sitwasyon.

Mga Quantum Circuit​

Ang klase ng QuantumCircuit ay nag-iimbak ng mga qubit nito sa isang listahan (QuantumCircuit.qubits). Ang index ng isang qubit sa listahang ito ang nagtatakda ng label ng qubit.

# Added by doQumentation β€” required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit

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

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

Mga Circuit diagram​

Sa isang circuit diagram, ang qubit 00 ay ang pinakataas na qubit, at ang qubit nβˆ’1n-1 ang pinakababa. Maaari mong baguhin ito gamit ang argument na reverse_bits ng QuantumCircuit.draw (tingnan ang Baguhin ang order sa Qiskit).

qc.x(1)
qc.draw()
q_0: ─────
β”Œβ”€β”€β”€β”
q_1: ─ X β”œ
β””β”€β”€β”€β”˜

Mga integer​

Kapag binibigyang-kahulugan ang mga bits bilang isang numero, ang bit 00 ang pinakamababang significant na bit, at ang bit nβˆ’1n-1 ang pinaka-significant. Ito ay nakakatulong kapag nagco-code dahil ang bawat bit ay may value na 2label2^\text{label} (ang label ay ang index ng qubit sa QuantumCircuit.qubits). Halimbawa, ang sumusunod na circuit execution ay nagtatapos nang ang bit 00 ay 0, at ang bit 11 ay 1. Ito ay binibigyang-kahulugan bilang decimal integer na 2 (nasukat na may probability na 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()}")
> Counts: {'10': 1024}

Mga string​

Kapag nagpapakita o nagbibigyang-kahulugan ng listahan ng mga bits (o qubits) bilang isang string, ang bit nβˆ’1n-1 ang pinakakaliwa, at ang bit 00 ang pinakakanan. Ito ay dahil karaniwang sinusulat natin ang mga numero nang may pinaka-significant na digit sa kaliwa, at sa Qiskit, ang bit nβˆ’1n-1 ay inaaaring pinaka-significant na bit.

Halimbawa, ang sumusunod na cell ay nagtatakda ng isang Statevector mula sa isang string ng mga single-qubit state. Sa kasong ito, ang qubit 00 ay nasa state na ∣+⟩|+\rangle, at ang qubit 11 ay nasa state na ∣0⟩|0\rangle.

from qiskit.quantum_info import Statevector

sv = Statevector.from_label("0+")
sv.probabilities_dict()
{np.str_('00'): np.float64(0.4999999999999999),
np.str_('01'): np.float64(0.4999999999999999)}

Minsan nagdudulot ito ng kalituhan kapag binibigyang-kahulugan ang isang string ng mga bits, dahil maaari mong asahan na ang pinakakaliwa ay bit 00, samantalang karaniwang kinakatawan nito ang bit nβˆ’1n-1.

Mga Statevector matrix​

Kapag kinakatawan ang isang statevector bilang isang listahan ng mga kumplikadong numero (amplitudes), ino-order ng Qiskit ang mga amplitude na ito upang ang amplitude sa index xx ay kumakatawan sa computational basis state na ∣x⟩|x\rangle.

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

Mga Gate​

Ang bawat Gate sa Qiskit ay maaaring bigyan ng sariling kahulugan ang isang listahan ng mga qubit, ngunit ang mga controlled gate ay karaniwang sumusunod sa convention na (control, target).

Halimbawa, ang sumusunod na cell ay nagdaragdag ng isang controlled-X gate kung saan ang qubit 00 ang control at ang qubit 11 ang target.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()
q_0: ──■──
β”Œβ”€β”΄β”€β”
q_1: ─ X β”œ
β””β”€β”€β”€β”˜

Batay sa lahat ng naunang convention ng Qiskit, ang CX-gate na ito ay nagsasagawa ng transformation na ∣01βŸ©β†”βˆ£11⟩|01\rangle \leftrightarrow |11\rangle, kaya mayroon itong sumusunod na matrix.

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

Baguhin ang order sa Qiskit​

Para iguhit ang isang circuit nang may mga qubit sa baligtad na order (ibig sabihin, ang qubit 00 sa ibaba), gamitin ang argument na reverse_bits. Nakakaapekto lamang ito sa nabuong diagram at hindi nakakaapekto sa circuit; ang X-gate ay gumagana pa rin sa qubit 00.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)
q_1: ─────
β”Œβ”€β”€β”€β”
q_0: ─ X β”œ
β””β”€β”€β”€β”˜

Maaari mong gamitin ang paraan ng reverse_bits para ibalik ang isang bagong circuit nang may mga label ng qubit na binaliktad (hindi nito binabago ang orihinal na circuit).

qc.reverse_bits().draw()
q_0: ─────
β”Œβ”€β”€β”€β”
q_1: ─ X β”œ
β””β”€β”€β”€β”˜

Pansinin na sa bagong circuit na ito, ang X-gate ay gumagana sa qubit 11.

Mga susunod na hakbang​

Mga rekomendasyon