Pauli测量

在量子机器学习领域,常常使用Pauli测量得到量子电路的期望。

1. 创建isQ代码

这段代码命名为pauli_measurement.isq,并且放在同一个目录。

import std;

qbit q[1];
int pauli_inx[] = {2}; // this means Z0

// using arrays for pauli measurement
// X:0, Y:1, Z:2, I:3
// examples:
// int pauli_inx[] = {2, 2} -> Z0Z1
// int pauli_inx[] = {0, 1, 2, 3} -> X0Y1Z2I3
// int pauli_inx[] = {1} -> Y0

unit pauli(int puali_idx[], qbit q[]) {
    for i in 0:puali_idx.length {
        if (puali_idx[i] == 0) {
            H(q[i]);
            M(q[i]);
        }
        if (puali_idx[i] == 1) {
            X2P(q[i]);
            M(q[i]);
        }
        if (puali_idx[i] == 2) {
            M(q[i]);
        }
        if (puali_idx[i] == 3) {
            continue;
        }
    }
}

unit main() {
    Ry(1.0, q[0]);
    pauli(pauli_inx, q);
    // Z0 measure
}

2. Pauli测量

我们在pauli_measurement.isq给出了Pauli测量的写法。请仔细查看pauli_measurement.isq的注释部分。建立了IsqCircuit的实例qc后,此时要使用qc.pauli_measure()对该电路进行测量,得到Pauli测量的结果,结果的取值范围为[-1, 1]。

from isqtools import IsqCircuit
from isqtools.backend import NumpyBackend


backend = NumpyBackend()
qc = IsqCircuit(
    file="pauli_measurement.isq",
    backend=backend,
    sample=False,
)

print(qc.pauli_measure())
0.5403023058681399

电路可视化。

from isqtools.draw import Drawer

dr = Drawer()
dr.plot(qc.qcis)

png