Řazení bitů v Qiskit SDK
Verze balíčků
Kód na této stránce byl vyvinut s použitím níže uvedených závislostí. Doporučujeme použít tyto nebo novější verze.
qiskit[all]~=2.3.0
Pokud máš sadu bitů (nebo qubitů), každý bit obvykle označíš číslem . Různé softwary a zdroje musí zvolit, jak tyto bity uspořádat jak v paměti počítače, tak při zobrazení na obrazovce.
Konvence Qisku
Takto Qiskit SDK řadí bity v různých situacích.
Quantum circuits
Třída QuantumCircuit ukládá své qubity do seznamu
(QuantumCircuit.qubits). Index qubitu v tomto seznamu určuje
označení qubitu.
# 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>
Schémata Circuit
Ve schématu Circuit je qubit nejvýše a qubit nejníže. Toto chování lze změnit argumentem reverse_bits metody
QuantumCircuit.draw (viz Změna řazení v
Qiskitu).
qc.x(1)
qc.draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Celá čísla
Při interpretaci bitů jako čísla je bit nejméně významný a
bit nejvýznamnější. To se při programování hodí, protože každý bit má
hodnotu (label je index qubitu v
QuantumCircuit.qubits). Například následující spuštění Circuit skončí
tak, že bit je 0 a bit $1je1. To se interpretuje jako desetinné celé číslo 2(naměřeno s pravděpodobností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}
Řetězce
Při zobrazení nebo interpretaci seznamu bitů (nebo qubitů) jako řetězce je bit zcela vlevo a bit zcela vpravo. Je to proto, že čísla zapisujeme obvykle s nejvýznamnější cifrou vlevo, a v Qiskitu je bit považován za nejvýznamnější.
Například následující buňka definuje Statevector z řetězce
stavů jednoho qubitu. V tomto případě je qubit ve stavu a
qubit ve stavu .
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)}
To někdy způsobuje zmatek při interpretaci řetězce bitů, protože bys mohl(a) očekávat, že krajní levý bit je bit , zatímco obvykle představuje bit .
Matice Statevector
Při reprezentaci stavového vektoru jako seznam komplexních čísel (amplitud) Qiskit řadí tyto amplitudy tak, že amplituda na indexu reprezentuje výpočetní bázový stav .
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>
(0.7071067811865475+0j)
0j
Gates
Každý Gate v Qiskitu může interpretovat seznam qubitů po svém, ale
řízené Gate obvykle dodržují konvenci (control, target).
Například následující buňka přidává řízený Gate X, kde qubit je řídící a qubit je cílový.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Na základě všech výše zmíněných konvencí v Qiskitu provede tento CX-Gate transformaci , takže má následující matici.
Změna řazení v Qiskitu
Chceš-li nakreslit Circuit s qubity v obráceném pořadí (tj. qubit dole),
použij argument reverse_bits. Toto ovlivní pouze vygenerované
schéma a nijak nezmění samotný Circuit; Gate X stále působí na qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Metodou reverse_bits můžeš získat nový Circuit s obráceným označením qubitů (původní Circuit se nezmění).
qc.reverse_bits().draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Všimni si, že v tomto novém Circuit působí Gate X na qubit .
Další kroky
- Podívej se na příklad použití Circuit v tutoriálu Groverův algoritmus.
- Prozkoumej referenci QuantumCircuit API.