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 bit (atau qubit), biasanya setiap bit diberi label . 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 berada di posisi paling atas, dan Qubit 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 adalah bit paling tidak signifikan,
dan bit adalah yang paling signifikan. Ini memudahkan pengkodean karena setiap bit
memiliki nilai (label adalah indeks qubit dalam
QuantumCircuit.qubits). Misalnya, eksekusi Circuit berikut menghasilkan
bit bernilai 0, dan bit 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 adalah bit paling kiri, dan bit adalah bit paling kanan. Ini karena kita biasanya menulis angka dengan digit paling signifikan di sebelah kiri, dan dalam Qiskit, bit diinterpretasikan sebagai bit paling signifikan.
Misalnya, sel berikut mendefinisikan Statevector dari string keadaan qubit tunggal.
Dalam hal ini, Qubit berada dalam keadaan , dan
Qubit dalam keadaan .
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 , padahal biasanya itu merepresentasikan bit .
Matriks Statevectorβ
Saat merepresentasikan statevector sebagai daftar bilangan kompleks (amplitudo), Qiskit mengurutkan amplitudo-amplitudo tersebut sehingga amplitudo pada indeks merepresentasikan keadaan basis komputasional .
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 adalah control dan Qubit 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 , sehingga memiliki matriks berikut.
Mengubah urutan di Qiskitβ
Untuk menggambar Circuit dengan qubit dalam urutan terbalik (yaitu, Qubit 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 .
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 .
Langkah selanjutnyaβ
- Lihat contoh penggunaan Circuit dalam tutorial Algoritma Grover.
- Jelajahi referensi QuantumCircuit API.