Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions โ€” kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

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 nn bit (atau qubit), anda biasanya akan melabel setiap bit 0โ†’nโˆ’10 \rightarrow n-1. 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 00 ialah qubit paling atas, dan qubit nโˆ’1n-1 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 00 ialah bit paling kurang bererti, dan bit nโˆ’1n-1 adalah yang paling bererti. Ini memudahkan pengekodan kerana setiap bit mempunyai nilai 2label2^\text{label} (label ialah indeks qubit dalam QuantumCircuit.qubits). Sebagai contoh, pelaksanaan Circuit berikut berakhir dengan bit 00 bernilai 0, dan bit 11 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 nโˆ’1n-1 ialah bit paling kiri, dan bit 00 ialah bit paling kanan. Ini kerana kita biasanya menulis nombor dengan digit paling bererti di sebelah kiri, dan dalam Qiskit, bit nโˆ’1n-1 ditafsirkan sebagai bit paling bererti.

Sebagai contoh, sel berikut mentakrifkan Statevector daripada rentetan keadaan qubit tunggal. Dalam kes 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 kadangkala menimbulkan kekeliruan semasa mentafsir rentetan bit, kerana anda mungkin menjangka bit paling kiri sebagai bit 00, sedangkan ia biasanya mewakili bit nโˆ’1n-1.

Matriks Statevectorโ€‹

Apabila mewakili statevector sebagai senarai nombor kompleks (amplitud), Qiskit menyusun amplitud ini supaya amplitud pada indeks xx mewakili keadaan asas pengkomputeran โˆฃ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 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 00 ialah kawalan dan qubit 11 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 โˆฃ01โŸฉโ†”โˆฃ11โŸฉ|01\rangle \leftrightarrow |11\rangle, jadi mempunyai matriks berikut.

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

Ubah susunan dalam Qiskitโ€‹

Untuk melukis Circuit dengan qubit dalam susunan terbalik (iaitu, qubit 00 di bawah), gunakan argumen reverse_bits. Ini hanya mempengaruhi gambar rajah yang dijana dan tidak mempengaruhi Circuit; gate X masih bertindak pada qubit 00.

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 11.

Langkah seterusnyaโ€‹

Cadangan