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.5.2
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.
Primitivesโ
Bilang default, sinusunod ng Qiskit ang little-endian na convention ng bit ordering. Gayunpaman, ang default para sa BitArray ay big (endian), na nagdudulot ng ilang pagkakaiba sa output ng primitive, depende kung binabago ng primitive ang setting na ito. Halimbawa, ang mga primitive na Sampler at Estimator ng IBMยฎ Quantum Compute Service ay nagbabalik ng big-endian na resulta, ngunit little-endian na resulta ang ibinabalik ng Executor.
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 โ installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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 least significant bit (LSB), at ang bit ang most significant bit (MSB). 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 itinuturing na 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 method na 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.