Skip to main content
IBM Quantum Platform
  • 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 nn bits (o qubits), normalmente etiquetarás cada bit 0n10 \rightarrow n-1. 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 00 es el qubit superior, y el qubit n1n-1 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 00 es el menos significativo, y el bit n1n-1 el más significativo. Esto es útil a la hora de codificar porque cada bit tiene el valor 2label2^\text{label} (la etiqueta es el índice del qubit en QuantumCircuit.qubits). Por ejemplo, la siguiente ejecución del circuito termina con el bit 00 siendo 0, y el bit 11 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 n1n-1 es el bit situado más a la izquierda y el bit 00 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 n1n-1 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 00 está en el estado +|+\rangle, y qubit 11 en el estado 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)}

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 00, mientras que normalmente representa el bit n1n-1.

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 xx representa el estado base computacional x|x\rangle.

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 00 es el control y el qubit 11 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 0111|01\rangle \leftrightarrow |11\rangle, por lo que tiene la siguiente matriz.

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

Cambiar el orden en Qiskit

Para dibujar un circuito con qubits en orden inverso (es decir, qubit 00 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 00.

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


Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.