Skip to main content
IBM Quantum Platform
  • Il codice di questa pagina è stato sviluppato in base ai seguenti requisiti. Si consiglia di utilizzare queste versioni o versioni più recenti.

    qiskit[all]~=2.5.1
    

Ordine dei bit nell' Qiskit SDK

Se si dispone di un insieme di nn bit (o qubit), di solito si etichetta ogni bit 0n10 \rightarrow n-1. Diversi software e risorse devono scegliere come ordinare i bit questi bit sia nella memoria del computer sia quando vengono visualizzati sullo schermo.


Convenzioni Qiskit

Ecco come l'SDK Qiskit ordina i bit in diversi scenari.

Circuiti quantistici

La classe QuantumCircuit memorizza i suoi qubit in una lista (QuantumCircuit.qubits). L'indice di un qubit in questa lista definisce l'etichetta del qubit etichetta del qubit.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit import Qubit

qc = QuantumCircuit(2)
qc.qubits[0]  # qubit "0"

Qubit(QuantumRegister(2, "q"), 0)

Output:

<Qubit register=(2, "q"), index=0>

Schemi elettrici

In un diagramma di circuito, il qubit 00 è il qubit più in alto e il qubit n1n-1 è il qubit più in basso qubit più in basso. Si può cambiare con l'argomento reverse_bits di QuantumCircuit.draw (vedere Modifica dell'ordinamento in Qiskit ).

qc.x(1)
qc.draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Interi

Quando si interpretano i bit come un numero, il bit 00 è il bit meno significativo e il bit il più significativo il bit n1n-1 è il più significativo. Questo è utile per la codifica, perché ogni bit ha il valore il valore 2label2^\text{label} (l'etichetta è l'indice del qubit in QuantumCircuit.qubits). Ad esempio, la seguente esecuzione del circuito termina con il bit 00 che è 0, e il bit 11 che è 1. Questo viene interpretato come un intero decimale 2 (misurato con probabilità 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()}")

Output:

 > Counts: {'10': 1024}

Stringhe

Quando si visualizza o si interpreta un elenco di bit (o qubit) come una stringa, il bit n1n-1 è il bit più a sinistra e il bit 00 è il bit più a destra. Questo perché di solito di solito scriviamo i numeri con la cifra più significativa a sinistra, e in Qiskit, il bit n1n-1 viene interpretato come il bit più significativo.

Per esempio, la cella seguente definisce uno Statevector da una stringa di stati a stati a singolo qubit. In questo caso, il qubit 00 si trova nello stato +|+\rangle, e il il qubit 11 nello stato 0|0\rangle.

from qiskit.quantum_info import Statevector

sv = Statevector.from_label("0+")
sv.probabilities_dict()

Output:

{np.str_('00'): np.float64(0.4999999999999999),
 np.str_('01'): np.float64(0.4999999999999999)}

Questo può causare confusione nell'interpretazione di una stringa di bit, in quanto ci si potrebbe aspettare che il bit più a sinistra sia il bit, mentre di solito rappresenta un bit ci si potrebbe aspettare che il bit più a sinistra sia il bit 00, mentre di solito rappresenta il bit n1n-1.

Matrice vettori di stato

Quando si rappresenta un vettore di stato come una lista di numeri complessi (ampiezze), Qiskit ordina queste ampiezze in modo che l'ampiezza all'indice xx rappresenti lo stato base computazionale lo stato base computazionale x|x\rangle.

print(sv[1])  # amplitude of state |01>
print(sv[2])  # amplitude of state |10>

Output:

(0.7071067811865475+0j)
0j

Gate

Ogni porta di Qiskit può interpretare una lista di qubit a modo suo, ma le porte controllate di solito seguono la convenzione gate controllati di solito seguono la convenzione (control, target).

Ad esempio, la cella seguente aggiunge un gate controllato-X in cui il qubit 00 è il controllo e il qubit è il target controllo e il qubit 11 è il target.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()

Output:

          
q_0: ──■──
     ┌─┴─┐
q_1: ┤ X ├
     └───┘

Seguendo tutte le convenzioni precedentemente menzionate in Qiskit, questo CX-gate esegue la trasformazione 0111|01\rangle \leftrightarrow |11\rangle, quindi ha la seguente matrice.

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

Modifica dell'ordinamento in Qiskit

Per disegnare un circuito con i qubit in ordine inverso (cioè con il qubit 00 in basso), utilizzare l'argomento in basso), utilizzare l'argomento reverse_bits . Questo influisce solo sul diagramma generato e non influisce sul circuito; la porta X continua ad agire sul qubit 00.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)

Output:

          
q_1: ─────
     ┌───┐
q_0: ┤ X ├
     └───┘

È possibile utilizzare il metodo reverse_bits per restituire un nuovo circuito con le etichette dei con le etichette dei qubit invertite (questo non modifica il circuito originale).

qc.reverse_bits().draw()

Output:

          
q_0: ─────
     ┌───┐
q_1: ┤ X ├
     └───┘

Si noti che in questo nuovo circuito la porta X agisce sul qubit 11.


Passi successivi

Suggerimenti
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.