El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o versiones más recientes.
qiskit[all]~=2.5.0
Ordenación de bits en el sistema de ordenación de bits ( Qiskit SDK )
Si tienes un conjunto de bits (o qubits), normalmente etiquetarás cada bit . Los distintos programas y recursos deben elegir cómo ordenan estos bits tanto en la memoria del ordenador como en la pantalla.
Convenciones de Qiskit
Así es como el SDK de Qiskit ordena los bits en diferentes escenarios.
Circuitos cuánticos
La clase QuantumCircuit almacena sus qubits en una lista (QuantumCircuit.qubits). El índice de un qubit en esta lista define la etiqueta del qubit etiqueta 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>
Diagramas de circuitos
En un diagrama de circuito, el qubit es el qubit superior, y el qubit el qubit qubit inferior. Puede cambiar esto con el argumento reverse_bits de QuantumCircuit.draw (ver Cambiar el orden en Qiskit ).
qc.x(1)
qc.draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Enteros
Al interpretar los bits como un número, el bit es el menos significativo, y el bit el más significativo. Esto es útil a la hora de codificar porque cada bit tiene el valor (la etiqueta es el índice del qubit en QuantumCircuit.qubits). Por ejemplo, la siguiente ejecución del circuito termina con el bit siendo 0, y el bit siendo 1. Esto se interpreta como el entero decimal 2 (medido con probabilidad 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}
Series
Al mostrar o interpretar una lista de bits (o qubits) como una cadena, el bit es el bit situado más a la izquierda y el bit es el situado más a la derecha. Esto se debe a que normalmente escribimos los números con el dígito más significativo a la izquierda, y en Qiskit, el bit se interpreta como el bit más significativo.
Por ejemplo, la siguiente celda define un Statevector a partir de una cadena de estados single-qubit. En este caso, el qubit está en el estado , y qubit en el estado .
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)}
En ocasiones, esto provoca confusión al interpretar una cadena de bits, ya que podría esperarse que el bit situado más a la izquierda fuera el bit , mientras que normalmente representa el bit .
Matrices de vectores de estado
Al representar un vector de estado como una lista de números complejos (amplitudes), Qiskit ordena estas amplitudes de tal manera que la amplitud en el índice representa el estado base computacional .
print(sv[1]) # amplitude of state |01>
print(sv[2]) # amplitude of state |10>Output:
(0.7071067811865475+0j)
0j
Puertas
Cada puerta en Qiskit puede interpretar una lista de qubits de su propia manera, pero puertas controladas suelen seguir la convención (control, target).
Por ejemplo, la siguiente celda añade una puerta X controlada donde el qubit es el control y el qubit es el objetivo.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw()Output:
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
Siguiendo todas las convenciones mencionadas anteriormente en Qiskit, este CX-gate realiza la transformación , por lo que tiene la siguiente matriz.
Cambiar el orden en Qiskit
Para dibujar un circuito con qubits en orden inverso (es decir, qubit al abajo), utilice el argumento reverse_bits . Esto sólo afecta al diagrama generado y no afecta al circuito; la compuerta X sigue actuando sobre el qubit .
from qiskit import QuantumCircuit
qc = QuantumCircuit(2)
qc.x(0)
qc.draw(reverse_bits=True)Output:
q_1: ─────
┌───┐
q_0: ┤ X ├
└───┘
Puedes utilizar el método reverse_bits para devolver un nuevo circuito con las etiquetas de los qubits invertidas (esto no muta el circuito original).
qc.reverse_bits().draw()Output:
q_0: ─────
┌───┐
q_1: ┤ X ├
└───┘
Obsérvese que en este nuevo circuito, la compuerta X actúa sobre el qubit .
Próximos pasos
- Ver un ejemplo de uso de circuitos en el tutorial del Algoritmo de Grover.
- Explore la referencia de la API QuantumCircuit.