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.6.1
Jika kamu punya sekumpulan bit (atau qubit), biasanya setiap bit diberi label . Berbagai perangkat lunak dan referensi 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.
Primitivesโ
Secara default, Qiskit mengikuti konvensi urutan bit little-endian. Namun, default untuk BitArray adalah big (endian), yang menyebabkan beberapa perbedaan pada output primitif, tergantung apakah primitif tersebut mengubah pengaturan ini. Misalnya, primitif Sampler dan Estimator dari IBMยฎ Quantum Compute Service mengembalikan hasil big-endian, tetapi Executor mengembalikan hasil little-endian.
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 โ 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>
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 saat menulis kode 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 komputasi .
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.