Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions โ€” kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

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 nn bit (atau qubit), biasanya setiap bit diberi label 0โ†’nโˆ’10 \rightarrow n-1. 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 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 saat menulis kode 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 komputasi โˆฃ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