Skip to Content

线路变换

copy()、inverse()、dagger()、reverse()、repeat()、decompose() 和 control() 返回新线路;append()、prepend()、initialize() 和量子门方法原地修改线路。

选择方法前先区分两类操作:返回新线路的变换不会修改原对象,组合与初始化方法则会修改当前线路。

from unitarylab import Circuit qc = Circuit(2) qc.h(0) qc.cx(0, 1) qc_copy = qc.copy() qc_inverse = qc.inverse() qc_dagger = qc.dagger() qc_reversed = qc.reverse() qc_repeated = qc.repeat(3) qc_decomposed = qc.decompose(n=1) qc_controlled = qc.control(num_control_qubits=2, control_state="01")
方法说明
copy()返回独立拷贝
inverse() / dagger()反转门顺序并取共轭转置
reverse()镜像翻转量子比特索引,门顺序不变
repeat(times)重复整条线路
decompose(n, name)展开指定层数的块门
control(num_control_qubits, control_state=None)将整条线路包装成受控线路
append(other, target, ...)原地追加子线路
prepend(other, target, ...)原地前置子线路
initialize(state, target, ...)原地制备指定状态,目标比特必须尚未使用

inverse() 与 dagger() 等价,用于构造线路的共轭转置;包含测量等非酉操作的线路不能求逆。reverse() 只重映射量子比特位置,不反转门的时间顺序。

import numpy as np sub = Circuit(2) sub.z(0) appended = qc.copy() appended.append(sub, target=[0, 1]) prepared = Circuit(2) state = np.array([1 / np.sqrt(2), 1 / np.sqrt(2)]) prepared.initialize(state, target=0) prepared.cx(0, 1)

执行器会在执行块门前展开其内容;需要绘制或分析块门内部结构时,可先调用 decompose()。

组合约束

  • append()、prepend() 的 target 长度必须匹配子线路宽度,目标索引不能重复。
  • 可选 control 位不能与 target 重叠;control_state 长度必须匹配控制位数量。
  • repeat(times) 要求 times 为正整数。
  • initialize() 的状态长度必须为 ,其中 k 为目标量子比特数;状态必须可归一化。
  • decompose(n=...) 只展开指定层数;重复调用或增大 n 可继续展开嵌套块门。

验证变换

对于小型无测量线路,可比较矩阵验证组合关系:

import numpy as np identity = qc.copy() identity.append(qc.inverse(), target=[0, 1]) assert np.allclose(identity.get_matrix(), np.eye(4))

矩阵计算的内存随量子比特数指数增长,只适合小线路验证。

相关页面

最后更新于