Susunan bit dalam Qiskit SDK
Package versions
Kod dalam halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=2.5.2
Jika anda mempunyai set bit (atau qubit), anda biasanya akan melabel setiap bit . Perisian dan sumber yang berbeza perlu memilih cara menyusun bit ini dalam memori komputer dan semasa dipaparkan pada skrin.
Konvensyen Qiskitโ
Berikut ialah cara Qiskit SDK menyusun bit dalam senario berbeza.
Primitifโ
Secara lalai, Qiskit mengikut konvensyen susunan bit little-endian. Walau bagaimanapun, lalai bagi BitArray ialah big (endian), yang menyebabkan beberapa perbezaan pada output primitif, bergantung pada sama ada primitif itu mengubah tetapan ini. Contohnya, primitif Sampler dan Estimator IBMยฎ Quantum Compute Service memulangkan hasil big-endian, tetapi Executor memulangkan hasil little-endian.
Circuit Quantumโ
Kelas QuantumCircuit menyimpan qubitnya dalam senarai
(QuantumCircuit.qubits). Indeks sesebuah qubit dalam senarai 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>
Gambar rajah Circuitโ
Dalam gambar rajah Circuit, qubit ialah qubit paling atas, dan qubit ialah
qubit paling bawah. Anda boleh mengubah ini dengan argumen reverse_bits pada
QuantumCircuit.draw (lihat Ubah susunan dalam
Qiskit).
qc.x(1)
qc.draw()
q_0: โโโโโ
โโโโโ
q_1: โค X โ
โโโโโ
Integerโ
Apabila mentafsir bit sebagai nombor, bit ialah bit paling kurang bererti, dan
bit adalah yang paling bererti. Ini memudahkan pengekodan kerana setiap bit mempunyai
nilai (label ialah indeks qubit dalam
QuantumCircuit.qubits). Sebagai contoh, pelaksanaan Circuit berikut berakhir
dengan bit bernilai 0, dan bit bernilai 1. Ini ditafsirkan sebagai
integer perpuluhan 2 (diukur dengan kebarangkalian 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}
Rentetanโ
Apabila memaparkan atau mentafsir senarai bit (atau qubit) sebagai rentetan, bit ialah bit paling kiri, dan bit ialah bit paling kanan. Ini kerana kita biasanya menulis nombor dengan digit paling bererti di sebelah kiri, dan dalam Qiskit, bit ditafsirkan sebagai bit paling bererti.
Sebagai contoh, sel berikut mentakrifkan Statevector daripada rentetan
keadaan qubit tunggal. Dalam kes 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 kadangkala menimbulkan kekeliruan semasa mentafsir rentetan bit, kerana anda mungkin menjangka bit paling kiri sebagai bit , sedangkan ia biasanya mewakili bit .
Matriks Statevectorโ
Apabila mewakili statevector sebagai senarai nombor kompleks (amplitud), Qiskit menyusun amplitud ini supaya amplitud pada indeks mewakili keadaan asas pengkomputeran .
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>
(0.7071067811865475+0j)
0j
gateโ
Setiap Gate dalam Qiskit boleh mentafsir senarai Qubit mengikut caranya sendiri, tetapi
Gate terkawal biasanya mengikut konvensyen (control, target).
Sebagai contoh, sel berikut menambah gate X terkawal di mana qubit ialah kawalan dan qubit ialah sasaran.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()
q_0: โโโ โโ
โโโดโโ
q_1: โค X โ
โโโโโ
Mengikuti semua konvensyen Qiskit yang disebutkan sebelum ini, gate CX ini melakukan transformasi , jadi mempunyai matriks berikut.
Ubah susunan dalam Qiskitโ
Untuk melukis Circuit dengan qubit dalam susunan terbalik (iaitu, qubit di
bawah), gunakan argumen reverse_bits. Ini hanya mempengaruhi gambar rajah yang dijana
dan tidak mempengaruhi Circuit; gate X masih bertindak pada qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)
q_1: โโโโโ
โโโโโ
q_0: โค X โ
โโโโโ
Anda boleh menggunakan kaedah reverse_bits untuk mengembalikan Circuit baharu dengan
label qubit yang diterbalikkan (ini tidak mengubah Circuit asal).
qc.reverse_bits().draw()
q_0: โโโโโ
โโโโโ
q_1: โค X โ
โโโโโ
Perhatikan bahawa dalam Circuit baharu ini, gate X bertindak pada qubit .
Langkah seterusnyaโ
- Lihat contoh penggunaan Circuit dalam tutorial Algoritma Grover.
- Terokai rujukan QuantumCircuit API.