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 bit (o qubit), di solito si etichetta ogni bit . 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 è il qubit più in alto e il qubit è 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 è il bit meno significativo e il bit il più significativo il bit è il più significativo. Questo è utile per la codifica, perché ogni bit ha il valore il valore (l'etichetta è l'indice del qubit in QuantumCircuit.qubits). Ad esempio, la seguente esecuzione del circuito termina con il bit che è 0, e il bit 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 è il bit più a sinistra e il bit è 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 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 si trova nello stato , e il il qubit nello stato .
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 , mentre di solito rappresenta il bit .
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 rappresenti lo stato base computazionale lo stato base computazionale .
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 è il controllo e il qubit è il target controllo e il qubit è 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 , quindi ha la seguente matrice.
Modifica dell'ordinamento in Qiskit
Per disegnare un circuito con i qubit in ordine inverso (cioè con il qubit 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 .
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 .
Passi successivi
- Un esempio di utilizzo dei circuiti è riportato nell'esercitazione sull' algoritmo di Grover.
- Esplorate il riferimento all' API QuantumCircuit.