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 bits (o qubits), karaniwang ina-label ang bawat bit mula . 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 ay ang pinakataas na qubit, at ang qubit 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 ang pinakamababang
significant na bit, at ang bit ang pinaka-significant. Ito ay nakakatulong kapag nagco-code
dahil ang bawat bit ay may value na (ang label ay ang index ng qubit sa
QuantumCircuit.qubits). Halimbawa, ang sumusunod na circuit execution ay nagtatapos
nang ang bit ay 0, at ang bit 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 ang pinakakaliwa, at ang bit ang pinakakanan. Ito ay dahil karaniwang sinusulat natin ang mga numero nang may pinaka-significant na digit sa kaliwa, at sa Qiskit, ang bit 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 ay nasa state na , at
ang qubit ay nasa state na .
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 , samantalang karaniwang kinakatawan nito ang bit .
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 ay kumakatawan sa computational basis state na .
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 ang control at ang qubit 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 , kaya mayroon itong sumusunod na matrix.
Baguhin ang order sa Qiskitβ
Para iguhit ang isang circuit nang may mga qubit sa baligtad na order (ibig sabihin, ang qubit 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 .
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 .
Mga susunod na hakbangβ
- Tingnan ang isang halimbawa ng paggamit ng mga circuit sa tutorial ng Grover's Algorithm.
- I-explore ang reference ng QuantumCircuit API.