QPanda是由本源量子开发的开源量子计算编程框架,它可以用于构建、运行和优化量子算法。QPanda作为本源量子计算系列软件的基础库,OriginIR、Qurator、量子计算服务提供核心部件。

本节向大家介绍数据编码。

调用量子门形成组合的过程中,会频繁需要调用经典数据。

将经典格式编码到量子态是量子计算中的一个重要的预处理环节,主要有2实现方式:

1. 编码到基向量。指将经典数据转化为整数形式后,将其二进制展开以直积态表示;

2. 编码到振幅上。指将经典数据通过量子门操作转化到量子态的振幅。

编码到基向量

对于任给的经典数据,通过追加额外比特,可以将它拆分成不含虚部、负号和小数点的多个非负整数的组合。 因此此处只介绍对于非负整数的编码过程。

注解

复数→实数→非负实数→非负整数复数→实数→非负实数→非负整数

二进制展开:

任给经典非负整数,对其进行二进制展开,每一位二进制数都可以简单绑定到单个量子比特,那么任给不超过N的非负整数,只需要 log2(N)个比特就可以将其绑定到基向量上。

存储比特与索引比特:

对于上限均为N的k个经典数据,需要 log2(N) 个存储量子比特和 log2(k)] 个索引量子比特将其编码到量子态基向量,每个数据均需要 log2(N)个条件非量子门。

考虑到量子比特的特性,当添加了索引比特之后,多个经典数据可以共用存储比特。如图所示,k个经典非负整数数据由二进制展开逐位对应编码到存储比特上,每个经典数据的编码量子门受控于索引比特的一种状态。

编码到振幅

编码到振幅的方式兼容所 有的复数经典数据,但虚部依然需要追加额外比特。 方便起 见,此处只考虑编码实数经典数据。

如图所示,假设某个物理量A由4种属性描述,属性的取值均为实数。于是A的状态可以用归一化的波函数表示,进而A的量子态 |A 可以表示成如公式所示的叠加态。

不妨假设

注解

否则 |A 不是叠加态

于是有

进而

直接由此表达式给出RY和受控RY量子门的组合,可以完成对4属性物理A的二比特量子态的编码。

推广到以N个实数刻画的经典数据,将其编码到量子态振幅的所需的量子比特数目为 log2(N),使用的量子门数量为 2log2(N)1

对比两种不同的编码方式,编码到振幅上的方式兼容的数据类型更广,所需量子比特数更低,但不能进行经典数据相关的量子态的量子四则运算。

https://qpanda-tutorial.readthedocs.io/zh/latest/DataEncoding.html#

https://qcode.qubitonline.cn/rostrum/index.html