Kolejność bitów w Qiskit SDK
Wersje pakietów
Kod na tej stronie został opracowany przy użyciu następujących wymagań. Zalecamy użycie tych lub nowszych wersji.
qiskit[all]~=2.3.0
Jeśli masz zbiór bitów (lub qubitów), zazwyczaj każdy bit oznaczasz etykietą od . Różne programy i zasoby muszą wybrać sposób porządkowania tych bitów zarówno w pamięci komputera, jak i podczas wyświetlania na ekranie.
Konwencje Qiskit
Oto jak Qiskit SDK porządkuje bity w różnych scenariuszach.
Quantum Circuit
Klasa QuantumCircuit przechowuje swoje qubity na liście
(QuantumCircuit.qubits). Indeks qubitu na tej liście definiuje
etykietę 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>
Diagramy Circuit
Na diagramie Circuit qubit jest qubitem znajdującym się najwyżej, a qubit
najniżej. Możesz to zmienić za pomocą argumentu reverse_bits
metody QuantumCircuit.draw (zobacz Zmiana kolejności w
Qiskit).
qc.x(1)
qc.draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Liczby całkowite
Przy interpretowaniu bitów jako liczby, bit jest bitem najmniej znaczącym, a
bit najbardziej znaczącym. Jest to wygodne podczas pisania kodu, ponieważ każdy bit ma
wartość (gdzie label to indeks qubitu w
QuantumCircuit.qubits). Na przykład poniższe wykonanie Circuit kończy się
z bitem równym 0 i bitem równym 1. Jest to interpretowane jako
dziesiętna liczba całkowita 2 (zmierzona z prawdopodobieństwem 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}
Ciągi znaków
Przy wyświetlaniu lub interpretowaniu listy bitów (lub qubitów) jako ciągu znaków, bit jest bitem znajdującym się najbardziej na lewo, a bit najbardziej na prawo. Wynika to z tego, że zazwyczaj zapisujemy liczby z najbardziej znaczącą cyfrą po lewej stronie, a w Qiskit bit jest interpretowany jako bit najbardziej znaczący.
Na przykład poniższa komórka definiuje Statevector na podstawie ciągu
stanów jednoQubitowych. W tym przypadku qubit jest w stanie , a
qubit w stanie .
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)}
Czasami prowadzi to do nieporozumień przy interpretowaniu ciągu bitów, ponieważ możesz oczekiwać, że bit najbardziej na lewo to bit , podczas gdy zazwyczaj reprezentuje on bit .
Macierze Statevector
Przy reprezentowaniu wektora stanu jako listy liczb zespolonych (amplitud), Qiskit porządkuje te amplitudy tak, że amplituda pod indeksem reprezentuje stan bazy obliczeniowej .
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>
(0.7071067811865475+0j)
0j
Gate
Każdy Gate w Qiskit może interpretować listę qubitów na swój własny sposób, jednak
bramki kontrolowane zazwyczaj stosują konwencję (control, target).
Na przykład poniższa komórka dodaje Gate controlled-X, gdzie qubit jest kontrolnym, a qubit docelowym.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Zgodnie ze wszystkimi wcześniej wymienionymi konwencjami Qiskit, ta bramka CX wykonuje transformację , a więc ma następującą macierz.
Zmiana kolejności w Qiskit
Aby narysować Circuit z qubitami w odwróconej kolejności (czyli qubit na
dole), użyj argumentu reverse_bits. Wpływa to tylko na wygenerowany
diagram i nie zmienia Circuit; Gate X nadal działa na qubicie .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Możesz użyć metody reverse_bits, aby zwrócić nowy Circuit z odwróconymi
etykietami qubitów (nie zmienia to oryginalnego Circuit).
qc.reverse_bits().draw()
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Zauważ, że w tym nowym Circuit Gate X działa na qubicie .
Następne kroki
- Zobacz przykład użycia Circuit w tutorialu Algorytm Grovera.
- Zapoznaj się z dokumentacją API QuantumCircuit.