Skip to content

编码 -- 量子态编码

Encode 类的 API 参考,提供将经典数据编码到量子态的方法。每种编码方法使用不同的策略将输入数据映射到量子比特上,产生一个 QCircuit,可通过 get_circuit() 获取。

Encode

python
class Encode:
    def __init__() -> None

构造新的 Encode 实例。


编码方法

basic_encode

将经典二进制字符串映射到量子比特。字符串中的每个字符决定对应量子比特的基态。

签名

python
basic_encode(qubits: list[int], data: str) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datastr二进制字符串数据(例如 "1010")。

返回

无。线路存储在内部,可通过 get_circuit() 获取。

示例

python
from pyqpanda3.core import Encode

enc = Encode()
enc.basic_encode([0, 1, 2, 3], "1010")
circuit = enc.get_circuit()

amplitude_encode

使用振幅编码将经典数据编码到量子态。输入矢量被归一化并映射到态矢量振幅上。

签名

python
amplitude_encode(qubits: list[int], data: list[float]) -> None
amplitude_encode(qubits: list[int], data: list[complex]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]list[complex]经典数据矢量。自动归一化。

返回

无。线路存储在内部,可通过 get_circuit() 获取。

示例

python
from pyqpanda3.core import Encode

enc = Encode()
enc.amplitude_encode([0, 1], [0.5, 0.5, 0.5, 0.5])
circuit = enc.get_circuit()

amplitude_encode_recursive

使用递归振幅编码将经典数据编码到量子态。此方法将编码分解为更小的子问题,产生更有结构的线路。

签名

python
amplitude_encode_recursive(qubits: list[int], data: list[float]) -> None
amplitude_encode_recursive(qubits: list[int], data: list[complex]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]list[complex]经典数据矢量。自动归一化。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


angle_encode

通过将每个值映射到对应量子比特的旋转角度来编码经典数据。常用于变分量子算法。

签名

python
angle_encode(qubits: list[int], data: list[float], gate_type: GateType = GateType.RY) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]用作旋转角度的数据值。
gate_typeGateType旋转门类型。默认为 GateType.RY

返回

无。线路存储在内部,可通过 get_circuit() 获取。

示例

python
from pyqpanda3.core import Encode, GateType

enc = Encode()
enc.angle_encode([0, 1, 2], [0.5, 1.0, 1.5], gate_type=GateType.RX)
circuit = enc.get_circuit()

dense_angle_encode

通过使用两个旋转轴在每个量子比特上编码两个经典数据值,提供比标准角度编码更紧凑的编码。

签名

python
dense_angle_encode(qubits: list[int], data: list[float]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]要编码的数据值。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


iqp_encode

使用瞬时量子多项式(IQP, Instantaneous Quantum Polynomial)编码对数据进行编码,在 Hadamard 基中应用参数化对角门。

签名

python
iqp_encode(
    qubits: list[int],
    data: list[float],
    control_list: list[tuple[int, int]] = [],
    bool_inverse: bool = False,
    repeats: int = 1,
) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]要编码的数据值。
control_listlist[tuple[int, int]]定义量子比特交互的配对。默认为空。
bool_inversebool是否应用 IQP 线路的逆。默认为 False
repeatsint编码线路的重复次数。默认为 1。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


bid_amplitude_encode

使用 BID(双向)振幅编码对数据进行编码,迭代地将目标态分解为更小的块。

签名

python
bid_amplitude_encode(qubits: list[int], data: list[float], split: int = -1) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]表示量子态的振幅矢量。
splitint迭代分解的块大小。默认为 -1(自动)。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


dc_amplitude_encode

使用 DC(分治法)振幅编码通过层次分解方法对数据进行编码。

签名

python
dc_amplitude_encode(qubits: list[int], data: list[float]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]表示量子态的振幅矢量。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


schmidt_encode

使用 Schmidt 分解对数据进行编码。目标态被分解为子系统的乘积,并使用截断值来截断小的奇异值。

签名

python
schmidt_encode(qubits: list[int], data: list[float], cutoff: float = 0.0) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]表示量子态的振幅矢量。
cutofffloat截断小奇异值的阈值。默认为 0.0(不截断)。

返回

无。线路存储在内部,可通过 get_circuit() 获取。

示例

python
from pyqpanda3.core import Encode
import numpy as np

data = np.array([0.5, 0.5, 0.5, 0.5])
enc = Encode()
enc.schmidt_encode([0, 1], data.tolist(), cutoff=1)
circuit = enc.get_circuit()

sparse_isometry

使用等距分解制备稀疏量子态。接受多种格式的数据:将基态字符串映射到振幅的字典,或完整态矢量。

签名

python
sparse_isometry(qubits: list[int], data: dict[str, float]) -> None
sparse_isometry(qubits: list[int], data: dict[str, complex]) -> None
sparse_isometry(qubits: list[int], data: list[float]) -> None
sparse_isometry(qubits: list[int], data: list[complex]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datadict[str, float]dict[str, complex]list[float]list[complex]稀疏态数据。当为字典时,键是基态二进制字符串(例如 "00""11"),值是振幅。当为列表时,视为完整态矢量。

返回

无。线路存储在内部,可通过 get_circuit() 获取。

示例

python
from pyqpanda3.core import Encode

enc = Encode()
enc.sparse_isometry([0, 1], {"00": 0.707, "11": 0.707})
circuit = enc.get_circuit()

efficient_sparse

使用高效稀疏分解制备稀疏量子态。与 sparse_isometry 类似,但针对降低线路深度进行了优化。接受相同的数据格式。

签名

python
efficient_sparse(qubits: list[int], data: dict[str, float]) -> None
efficient_sparse(qubits: list[int], data: dict[str, complex]) -> None
efficient_sparse(qubits: list[int], data: list[float]) -> None
efficient_sparse(qubits: list[int], data: list[complex]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datadict[str, float]dict[str, complex]list[float]list[complex]sparse_isometry 相同格式的稀疏态数据。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


ds_quantum_state_preparation

使用双稀疏态制备制备量子态。接受多种格式的数据。

签名

python
ds_quantum_state_preparation(qubits: list[int], data: dict[str, float]) -> None
ds_quantum_state_preparation(qubits: list[int], data: dict[str, complex]) -> None
ds_quantum_state_preparation(qubits: list[int], data: list[float]) -> None
ds_quantum_state_preparation(qubits: list[int], data: list[complex]) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datadict[str, float]dict[str, complex]list[float]list[complex]制备的态参数。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


approx_mps_encode

使用近似矩阵积态(MPS, Matrix Product State)编码对数据进行编码。MPS 编码使用通过迭代扫描优化的低秩近似。

签名

python
approx_mps_encode(qubits: list[int], data: list[float], layers: int = 3, sweeps: int = 100, double2float: bool = False) -> None
approx_mps_encode(qubits: list[int], data: list[complex], layers: int = 3, sweeps: int = 100) -> None

参数

参数类型说明
qubitslist[int]要编码的量子比特索引。
datalist[float]list[complex]要编码的经典输入数据。
layersint编码层数。默认为 3。
sweepsint优化扫描次数。默认为 100。
double2floatbool编码前将 double 数据转换为 float。默认为 False。仅适用于 list[float] 重载。

返回

无。线路存储在内部,可通过 get_circuit() 获取。


工具方法

Encode.get_circuit

获取最近一次编码调用生成的量子线路。

签名

python
Encode.get_circuit() -> QCircuit

返回

编码方法产生的 QCircuit


Encode.get_out_qubits

获取编码过程的输出量子比特。

签名

python
Encode.get_out_qubits() -> list[int]

返回

表示编码输出的量子比特索引列表。


Encode.get_fidelity

计算编码量子态与输入数据描述的目标态之间的保真度。

签名

python
Encode.get_fidelity(data: list[float]) -> float
Encode.get_fidelity(data: list[complex]) -> float

参数

参数类型说明
datalist[float]list[complex]用于保真度计算的输入数据。

返回

计算得到的保真度值,表示编码态与目标态的接近程度。


另见

Released under the MIT License.