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

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 0→n−10 \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.

Primitivos

Por defecto, Qiskit sigue la convención de ordenación de bits «little-endian». Sin embargo, el valor por defecto de BitArray es ( big endian), lo que provoca algunas diferencias en la salida de la primitiva, dependiendo de si esta modifica esta configuración. Por ejemplo, las primitivas «Service Sampler» y «Estimator» de « IBM® Quantum Compute » devuelven resultados en formato «big-endian», pero «Executor» devuelve resultados en formato «little-endian».

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 n−1n-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 n−1n-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 n−1n-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 n−1n-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 n−1n-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 ∣01⟩↔∣11⟩|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.