Lewati ke konten utama

Pengurutan bit dalam Qiskit SDK

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan menggunakan versi ini atau yang lebih baru.

qiskit[all]~=2.3.0

Jika kamu punya sekumpulan nn bit (atau qubit), biasanya setiap bit diberi label 0β†’nβˆ’10 \rightarrow n-1. Berbagai perangkat lunak dan sumber daya harus memilih cara pengurutan bit-bit ini, baik di memori komputer maupun saat ditampilkan di layar.

Konvensi Qiskit​

Berikut cara Qiskit SDK mengatur urutan bit dalam berbagai skenario.

Quantum Circuit​

Kelas QuantumCircuit menyimpan qubit-nya dalam sebuah daftar (QuantumCircuit.qubits). Indeks suatu Qubit dalam daftar ini menentukan label qubit tersebut.

# 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>

Diagram Circuit​

Pada diagram Circuit, Qubit 00 berada di posisi paling atas, dan Qubit nβˆ’1n-1 di posisi paling bawah. Kamu bisa mengubah ini dengan argumen reverse_bits pada QuantumCircuit.draw (lihat Mengubah urutan di Qiskit).

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

Integer​

Saat menginterpretasikan bit sebagai angka, bit 00 adalah bit paling tidak signifikan, dan bit nβˆ’1n-1 adalah yang paling signifikan. Ini memudahkan pengkodean karena setiap bit memiliki nilai 2label2^\text{label} (label adalah indeks qubit dalam QuantumCircuit.qubits). Misalnya, eksekusi Circuit berikut menghasilkan bit 00 bernilai 0, dan bit 11 bernilai 1. Ini diinterpretasikan sebagai bilangan bulat desimal 2 (diukur dengan probabilitas 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}

String​

Saat menampilkan atau menginterpretasikan daftar bit (atau qubit) sebagai string, bit nβˆ’1n-1 adalah bit paling kiri, dan bit 00 adalah bit paling kanan. Ini karena kita biasanya menulis angka dengan digit paling signifikan di sebelah kiri, dan dalam Qiskit, bit nβˆ’1n-1 diinterpretasikan sebagai bit paling signifikan.

Misalnya, sel berikut mendefinisikan Statevector dari string keadaan qubit tunggal. Dalam hal ini, Qubit 00 berada dalam keadaan ∣+⟩|+\rangle, dan Qubit 11 dalam keadaan ∣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)}

Ini kadang menimbulkan kebingungan saat menginterpretasikan string bit, karena kamu mungkin mengira bit paling kiri adalah bit 00, padahal biasanya itu merepresentasikan bit nβˆ’1n-1.

Matriks Statevector​

Saat merepresentasikan statevector sebagai daftar bilangan kompleks (amplitudo), Qiskit mengurutkan amplitudo-amplitudo tersebut sehingga amplitudo pada indeks xx merepresentasikan keadaan basis komputasional ∣x⟩|x\rangle.

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

Gate​

Setiap Gate dalam Qiskit dapat menginterpretasikan daftar qubit dengan caranya sendiri, tetapi Gate terkontrol biasanya mengikuti konvensi (control, target).

Misalnya, sel berikut menambahkan Gate controlled-X di mana Qubit 00 adalah control dan Qubit 11 adalah target.

from qiskit import QuantumCircuit

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

Mengikuti semua konvensi yang telah disebutkan dalam Qiskit, Gate CX ini melakukan transformasi ∣01βŸ©β†”βˆ£11⟩|01\rangle \leftrightarrow |11\rangle, sehingga memiliki matriks berikut.

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

Mengubah urutan di Qiskit​

Untuk menggambar Circuit dengan qubit dalam urutan terbalik (yaitu, Qubit 00 di bagian bawah), gunakan argumen reverse_bits. Ini hanya mempengaruhi diagram yang dihasilkan dan tidak mempengaruhi Circuit itu sendiri; Gate X tetap bekerja pada Qubit 00.

from qiskit import QuantumCircuit

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

Kamu bisa menggunakan metode reverse_bits untuk mengembalikan Circuit baru dengan label qubit yang dibalik (ini tidak mengubah Circuit asli).

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

Perlu diingat bahwa dalam Circuit baru ini, Gate X bekerja pada Qubit 11.

Langkah selanjutnya​

Rekomendasi