Mind quantum 基础知识学习笔记(1)

1.搭建基础的量子电路

需要说明的是mindquantum和qiskit,paddlequantum不同,用到的量子门需要导入,还有一个就是mindquantum里面的CNOT门通过X(taget_qubits,control_qubits)实现,这里的目标位和控制位顺序同其它编程平台的不同,第一个参数是目标位,这里需要注意一下

import numpy as np                                          # 导入numpy库并简写为np
from mindquantum.core.gates import X, Y, Z, H, RX, RY, RZ   # 导入量子门H, X, Y, Z, RX, RY, RZ
from mindquantum.core.circuit import Circuit     # 导入Circuit模块,用于搭建量子线路


# 搭建第一个mind quantum 电路
print('Gate name:', X)
X.matrix()  # 获取X门对应的矩阵,以数组形式输出


encoder = Circuit()                              # 初始化量子线路
encoder += H.on(0)                               # H门作用在第0位量子比特
encoder += X.on(1, 0)                            # X门作用在第1位量子比特且受第0位量子比特控制
encoder += RY({'theta':np.pi}).on(2)             # RY(theta)门作用在第2位量子比特,pi需要从np中导入,赋予theta的值为pi/2

# print(encoder) # 以文本形式打印电路                      
encoder.summary()   # 总结Encoder量子线路 
encoder.svg() #电路可视化

2.量子模拟器:主要是以下几个函数的应用

# 量子模拟器

import numpy as np                             # 导入numpy库并简写为np
from mindquantum.simulator import Simulator    # 从mindquantum.simulator中导入Simulator类
from mindquantum.core.gates import X, H, RY, Measure # 导入相关的量子门以及量子测量(用于电路采样)



sim = Simulator('projectq', 2)   #声明一个两比特的projectq模拟器,Simulator类可以指定三个参数,其中projectq是后端模拟器,2这里是量子比特数;还有一个参数是seed,默认是一个随机数,可以不用指定
sim                              #展示模拟器状态



# 操作1:作用一个量子门到模拟器上
sim.apply_gate(H.on(0))
# 获取模拟器当前的量子态,ket默认为False
sim.get_qs(ket=True)

# 重置模拟器的状态,相当于获得一个全新的模拟器
sim.reset()
sim.get_qs(ket=True)

# 操作2: 将量子电路左右在量子模拟器上,需要首先构造一个量子电路

# 构建量子电路,需要导入相关的门,这里就构造一个经典的制备bell态的电路吧
# 首先,构造量子电路,和Qiskit,paddle不同的是这里不需要在Circuit中指定量子比特数目,量子比特数目可以通过酉操作以及作用在哪一个比特上推测?
circ = Circuit()
circ += H.on(0)
circ += X(1,0) # 第一个参数是目标位,第二个参数是控制位
circ += Measure('q0').on(0)                 # 在0号量子比特作用一个测量,并将该测量命名为'q0'
circ += Measure('q1').on(1)                 # 在1号量子比特作用一个测量,并将该测量命名为'q1'
circ.svg()

sim.reset()
result = sim.sampling(circ, shots=1000)  # 对上面定义的线路采样1000次
result.svg() # 打印出测量结果的SVG形式


# 含参量子电路的采样,重点是在于为参数赋值
circ = Circuit()
circ += H.on(0)
circ += RY('theta1').on(1) # 第一个参数是目标位,第二个参数是控制位
circ += Measure('q0').on(0)                 # 在0号量子比特作用一个测量,并将该测量命名为'q0'
circ += Measure('q1').on(1)                 # 在1号量子比特作用一个测量,并将该测量命名为'q1'
circ.svg()

sim.reset()
result = sim.sampling(circ, {'theta1':np.pi/2},shots=1000)  # 对上面定义的线路采样1000次
result.svg() # 打印出测量结果的SVG形式

学习代码过程中遇到的一个小问题:测量结果不知道哪边是高位?通过如下测试可以看出(mindquantum)中测量结果是从右往左读,依次对应q0,q1,q2的测量结果。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值