基于测量结果调节门控¶
collapse=True测量的输出可以按如下方式用作任何参数化门控中的参数:
In [1]:
Copied!
import numpy as np
from qibo import Circuit, gates
circuit = Circuit(2, density_matrix=True)
circuit.add(gates.H(0))
output = circuit.add(gates.M(0, collapse=True))
circuit.add(gates.RX(1, theta=np.pi * output.symbols[0] / 4))
result = circuit()
import numpy as np
from qibo import Circuit, gates
circuit = Circuit(2, density_matrix=True)
circuit.add(gates.H(0))
output = circuit.add(gates.M(0, collapse=True))
circuit.add(gates.RX(1, theta=np.pi * output.symbols[0] / 4))
result = circuit()
[Qibo 0.2.21|INFO|2025-10-11 16:59:59]: Using qibojit (numba) backend on /CPU:0
在这种情况下,会对第一个量子比特进行测量,如果测量结果为1,就会对第二个量子比特应用一个π/4的X旋转,否则不进行旋转。Qibo允许在电路创建过程中通过使用output对象将输出用作参数。这些符号可以通过output.symbols列表进行访问,并且在执行测量时会获得一个数值。如上所述,如果在电路执行期间设置nshots > 1,则会通过循环重复执行。
如果在collapse=True测量门中使用多个量子比特,则可以对output.symbols列表进行相应的索引:
In [11]:
Copied!
import numpy as np
from qibo import Circuit, gates
circuit = Circuit(3, density_matrix=True)
circuit.add(gates.H(0))
output = circuit.add(gates.M(0, 1, collapse=True))
circuit.add(gates.RX(1, theta=np.pi * output.symbols[0] / 4))
circuit.add(gates.RY(2, theta=np.pi * (output.symbols[0] + output.symbols[1]) / 5))
result = circuit()
import numpy as np
from qibo import Circuit, gates
circuit = Circuit(3, density_matrix=True)
circuit.add(gates.H(0))
output = circuit.add(gates.M(0, 1, collapse=True))
circuit.add(gates.RX(1, theta=np.pi * output.symbols[0] / 4))
circuit.add(gates.RY(2, theta=np.pi * (output.symbols[0] + output.symbols[1]) / 5))
result = circuit()
In [10]:
Copied!
print(result)
print(result)
(0.509+0j)|000><000| + (0.37907+0j)|100><100| + (0.12317+0j)|100><101| + 0.15702j|100><110| + 0.05102j|100><111| + (0.12317+0j)|101><100| + (0.04002+0j)|101><101| + 0.05102j|101><110| + 0.01658j|101><111| + -0.15702j|110><100| + -0.05102j|110><101| + (0.06504+0j)|110><110| + (0.02113+0j)|110><111| + -0.05102j|111><100| + -0.01658j|111><101| + (0.02113+0j)|111><110| + (0.00687+0j)|111><111|
In [12]:
Copied!
print(result)
print(result)
(0.481+0j)|000><000| + (0.40069+0j)|100><100| + (0.13019+0j)|100><101| + 0.16597j|100><110| + 0.05393j|100><111| + (0.13019+0j)|101><100| + (0.0423+0j)|101><101| + 0.05393j|101><110| + 0.01752j|101><111| + -0.16597j|110><100| + -0.05393j|110><101| + (0.06875+0j)|110><110| + (0.02234+0j)|110><111| + -0.05393j|111><100| + -0.01752j|111><101| + (0.02234+0j)|111><110| + (0.00726+0j)|111><111|
In [ ]:
Copied!