Medir qubits
Versiones del paquete
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.1.1
Para obtener información sobre el estado de un qubit, se puede medir en un bit clásico. En Qiskit, las mediciones se realizan en la base computacional, es decir, la base Pauli- de un solo qubit. Por lo tanto, una medición da 0 o 1, dependiendo del solapamiento con los estados propios de Pauli- y :
Mediciones a mitad de circuito
Las mediciones a mitad de circuito son un componente clave de los circuitos dinámicos. Antes de qiskit-ibm-runtime v0.43.0, measure era la única instrucción de medida en Qiskit. Sin embargo, las mediciones a mitad de circuito tienen unos requisitos de sintonización diferentes a las mediciones en los terminales (mediciones que tienen lugar al final de un circuito). Por ejemplo, hay que tener en cuenta la duración de las instrucciones cuando se ajusta una medición a mitad de circuito, ya que las instrucciones más largas provocan circuitos más ruidosos. No es necesario tener en cuenta la duración de la instrucción para las mediciones terminales porque no hay instrucciones después de las mediciones terminales.
En qiskit-ibm-runtime v0.43.0, se introdujo la instrucción MidCircuitMeasure . Como su nombre indica, se trata de una nueva instrucción de medición optimizada para la mitad del circuito en las QPU de IBM®.
La instrucción MidCircuitMeasure se asigna a la instrucción measure_2 indicada en el backend supported_instructions. Sin embargo, measure_2 no es compatible con todos los backends. Utiliza service.backends(filters=lambda b: "measure_2" in b.supported_instructions) para encontrar backends que lo soporten. Es posible que en el futuro se añadan nuevas medidas, pero no está garantizado.
Aplicar una medida a un circuito
Hay varias formas de aplicar medidas a un circuito:
QuantumCircuit.measure method
Utilice el measure método para medir un QuantumCircuit.
Ejemplos:
from qiskit import QuantumCircuit
qc = QuantumCircuit(5, 5)
qc.x(0)
qc.x(1)
qc.x(4)
qc.measure(
range(5), range(5)
) # Measures all qubits into the corresponding clbit.Output:
<qiskit.circuit.instructionset.InstructionSet at 0x7feaa7cd2290>
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure(1, 0) # Measure qubit 1 into the classical bit 0.Output:
<qiskit.circuit.instructionset.InstructionSet at 0x7feaa7c4d8d0>
Clase `Measure
La clase Qiskit Measure mide los qubits especificados.
from qiskit.circuit import Measure
qc = QuantumCircuit(3, 1)
qc.x([0, 1])
qc.append(Measure(), [0], [0]) # measure qubit 0 into clbit 0Output:
<qiskit.circuit.instructionset.InstructionSet at 0x7feaa7dc6260>
QuantumCircuit.measure_all method
Para medir todos los qubits en los bits clásicos correspondientes, utilice el método measure_all método. Por defecto, este método añade nuevos bits clásicos en un ClassicalRegister para almacenar estas mediciones.
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_all() # Measure all qubits.QuantumCircuit.measure_active method
Para medir todos los qubits que no están inactivos, utilice el método measure_active método. Este método crea un nuevo ClassicalRegister con un tamaño igual al número de qubits no ociosos que se están midiendo.
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 1)
qc.x([0, 2])
qc.measure_active() # Measure qubits that are not idle, that is, qubits 0 and 2.MidCircuitMeasure método
Utilice MidCircuitMeasure para aplicar una medición a mitad de circuito (requiere qiskit-ibm-runtime v0.43.0 o posterior). Aunque puede utilizar QuantumCircuit.measure para una medición a mitad de circuito, debido a su diseño, MidCircuitMeasure suele ser una mejor opción. Por ejemplo, añade menos sobrecarga a tu circuito que cuando utilizas QuantumCircuit.measure.
from qiskit import QuantumCircuit
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime.circuit import MidCircuitMeasure
from qiskit.circuit import Measure
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circ = QuantumCircuit(2, 2)
circ.x(0)
circ.append(MidCircuitMeasure(), [0], [0])
# circ.measure([0], [0])
# circ.measure_all()
print(circ.draw(cregbundle=False))Output:
┌───┐┌────────────┐
q_0: ┤ X ├┤0 ├
└───┘│ │
q_1: ─────┤ Measure_2 ├
│ │
c_0: ═════╡0 ╞
└────────────┘
c_1: ═══════════════════
- Debe haber al menos un registro clásico para poder utilizar mediciones.
- La primitiva Sampler requiere mediciones del circuito. Puede añadir mediciones de circuito con la primitiva Estimador, pero se ignoran.
Pasos siguientes
Measureclasemeasure_allmétodomeasure_activemétodorandom_circuitmétodo