编码 -- 量子态编码
Encode 类的 API 参考,提供将经典数据编码到量子态的方法。每种编码方法使用不同的策略将输入数据映射到量子比特上,产生一个 QCircuit,可通过 get_circuit() 获取。
Encode
class Encode:
def __init__() -> None构造新的 Encode 实例。
编码方法
basic_encode
将经典二进制字符串映射到量子比特。字符串中的每个字符决定对应量子比特的基态。
签名
basic_encode(qubits: list[int], data: str) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | str | 二进制字符串数据(例如 "1010")。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
示例
from pyqpanda3.core import Encode
enc = Encode()
enc.basic_encode([0, 1, 2, 3], "1010")
circuit = enc.get_circuit()amplitude_encode
使用振幅编码将经典数据编码到量子态。输入矢量被归一化并映射到态矢量振幅上。
签名
amplitude_encode(qubits: list[int], data: list[float]) -> None
amplitude_encode(qubits: list[int], data: list[complex]) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] 或 list[complex] | 经典数据矢量。自动归一化。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
示例
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
使用递归振幅编码将经典数据编码到量子态。此方法将编码分解为更小的子问题,产生更有结构的线路。
签名
amplitude_encode_recursive(qubits: list[int], data: list[float]) -> None
amplitude_encode_recursive(qubits: list[int], data: list[complex]) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] 或 list[complex] | 经典数据矢量。自动归一化。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
angle_encode
通过将每个值映射到对应量子比特的旋转角度来编码经典数据。常用于变分量子算法。
签名
angle_encode(qubits: list[int], data: list[float], gate_type: GateType = GateType.RY) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 用作旋转角度的数据值。 |
| gate_type | GateType | 旋转门类型。默认为 GateType.RY。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
示例
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
通过使用两个旋转轴在每个量子比特上编码两个经典数据值,提供比标准角度编码更紧凑的编码。
签名
dense_angle_encode(qubits: list[int], data: list[float]) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 要编码的数据值。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
iqp_encode
使用瞬时量子多项式(IQP, Instantaneous Quantum Polynomial)编码对数据进行编码,在 Hadamard 基中应用参数化对角门。
签名
iqp_encode(
qubits: list[int],
data: list[float],
control_list: list[tuple[int, int]] = [],
bool_inverse: bool = False,
repeats: int = 1,
) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 要编码的数据值。 |
| control_list | list[tuple[int, int]] | 定义量子比特交互的配对。默认为空。 |
| bool_inverse | bool | 是否应用 IQP 线路的逆。默认为 False。 |
| repeats | int | 编码线路的重复次数。默认为 1。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
bid_amplitude_encode
使用 BID(双向)振幅编码对数据进行编码,迭代地将目标态分解为更小的块。
签名
bid_amplitude_encode(qubits: list[int], data: list[float], split: int = -1) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 表示量子态的振幅矢量。 |
| split | int | 迭代分解的块大小。默认为 -1(自动)。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
dc_amplitude_encode
使用 DC(分治法)振幅编码通过层次分解方法对数据进行编码。
签名
dc_amplitude_encode(qubits: list[int], data: list[float]) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 表示量子态的振幅矢量。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
schmidt_encode
使用 Schmidt 分解对数据进行编码。目标态被分解为子系统的乘积,并使用截断值来截断小的奇异值。
签名
schmidt_encode(qubits: list[int], data: list[float], cutoff: float = 0.0) -> None参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] | 表示量子态的振幅矢量。 |
| cutoff | float | 截断小奇异值的阈值。默认为 0.0(不截断)。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
示例
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
使用等距分解制备稀疏量子态。接受多种格式的数据:将基态字符串映射到振幅的字典,或完整态矢量。
签名
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参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | dict[str, float]、dict[str, complex]、list[float] 或 list[complex] | 稀疏态数据。当为字典时,键是基态二进制字符串(例如 "00"、"11"),值是振幅。当为列表时,视为完整态矢量。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
示例
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 类似,但针对降低线路深度进行了优化。接受相同的数据格式。
签名
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参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | dict[str, float]、dict[str, complex]、list[float] 或 list[complex] | 与 sparse_isometry 相同格式的稀疏态数据。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
ds_quantum_state_preparation
使用双稀疏态制备制备量子态。接受多种格式的数据。
签名
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参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | dict[str, float]、dict[str, complex]、list[float] 或 list[complex] | 制备的态参数。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
approx_mps_encode
使用近似矩阵积态(MPS, Matrix Product State)编码对数据进行编码。MPS 编码使用通过迭代扫描优化的低秩近似。
签名
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参数
| 参数 | 类型 | 说明 |
|---|---|---|
| qubits | list[int] | 要编码的量子比特索引。 |
| data | list[float] 或 list[complex] | 要编码的经典输入数据。 |
| layers | int | 编码层数。默认为 3。 |
| sweeps | int | 优化扫描次数。默认为 100。 |
| double2float | bool | 编码前将 double 数据转换为 float。默认为 False。仅适用于 list[float] 重载。 |
返回
无。线路存储在内部,可通过 get_circuit() 获取。
工具方法
Encode.get_circuit
获取最近一次编码调用生成的量子线路。
签名
Encode.get_circuit() -> QCircuit返回
编码方法产生的 QCircuit。
Encode.get_out_qubits
获取编码过程的输出量子比特。
签名
Encode.get_out_qubits() -> list[int]返回
表示编码输出的量子比特索引列表。
Encode.get_fidelity
计算编码量子态与输入数据描述的目标态之间的保真度。
签名
Encode.get_fidelity(data: list[float]) -> float
Encode.get_fidelity(data: list[complex]) -> float参数
| 参数 | 类型 | 说明 |
|---|---|---|
| data | list[float] 或 list[complex] | 用于保真度计算的输入数据。 |
返回
计算得到的保真度值,表示编码态与目标态的接近程度。