量子门与测量
量子门方法会原地修改 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。
执行和读取结果见执行线路与查看结果。
相关页面
最后更新于