Skip to Content

量子门与测量

量子门方法会原地修改 Circuit。角度参数使用弧度,量子比特索引从 0 开始;不要依赖门方法的返回值进行链式调用。

单量子比特门

from unitarylab import Circuit qc = Circuit(4) qc.h(0) qc.x(1) qc.y(2) qc.z(3) qc.s(0) qc.sdag(1) qc.t(2) qc.tdag(3) qc.sx(0) qc.sxdag(1) qc.i(2) # 对多个比特广播 qc.h([0, 1, 2])

参数门

import numpy as np qc.rx(np.pi / 2, 0) qc.ry(np.pi / 4, 1) qc.rz(np.pi / 8, 2) qc.rzz(np.pi / 3, 0, 1) qc.p(np.pi / 2, 0) qc.u1(np.pi / 4, 0) qc.u2(np.pi / 3, np.pi / 5, 1) qc.u3(np.pi / 2, np.pi / 3, np.pi / 4, 2) qc.gp(np.pi / 6)

受控门与多比特门

qc.cx(0, 1) qc.mcx([0, 1], 2) qc.cy(0, 1) qc.cz(0, 1) qc.ch(0, 1) qc.cp(np.pi / 2, 0, 1) qc.crx(np.pi / 2, 0, 1) qc.swap(0, 1)

受控门接受可选 control_state。None 表示所有控制比特为 1 时触发,也可使用例如 "01" 的控制模式。任意 酉矩阵可通过 unitary(matrix, target) 添加。

matrix = np.array([[0, 1], [1, 0]], dtype=complex) qc.unitary(matrix, target=0)

自定义矩阵必须是维度为 的方阵并满足酉性,target 必须恰好包含 k 个不同量子比特。控制比特与目标比特不得重叠。

测量

qc = Circuit(2) qc.h(0) qc.cx(0, 1) qc.measure([0, 1], [0, 1]) result = qc.execute() print(result.classical_results_map)
  • measure(qubit, clbit) 的两个参数均可为整数或列表,数量必须对应。
  • 每个量子比特和经典比特只能映射一次,重复映射会抛出 ValueError。
  • 测量在执行时发生,结果写入 ExecutionResult.classical_results_map。

Circuit.measure() 只建立线路内的量子比特到经典比特映射。若只想从无测量线路的最终状态随机采样,请使用 ExecutionResult.sample();若要进行投影并坍缩结果对象的状态,请使用 ExecutionResult.measure()。

输入检查

  • 旋转角和自定义矩阵元素必须是有限数值。
  • 广播门接受单个索引或索引集合;多比特门的控制位、目标位数量必须符合门定义。
  • 已测量的线路不再是纯酉线路,不适合直接调用 get_matrix()。
  • control_state 的位数必须与控制量子比特数一致,只能包含 0 和 1。

执行和读取结果见执行线路与查看结果。

相关页面

最后更新于