Skip to content

分析 -- 距离度量与保真度 ​

用于比较概率分布、量子测量结果以及量子态保真度的函数。

hellinger_distance ​

计算两个概率分布之间的 Hellinger 距离(Hellinger distance)。Hellinger 距离衡量两个离散分布之间的相似度,范围在 [0,1] 之间。

对于离散分布 p 和 q:

H(p,q)=12∑x(p(x)−q(x))2

签名(整型键字典) ​

python
hellinger_distance(
    p: dict[int, float],
    q: dict[int, float],
) -> float

签名(字符串键字典) ​

python
hellinger_distance(
    p: dict[str, float],
    q: dict[str, float],
) -> float

参数 ​

参数类型说明
pdict[int, float] 或 dict[str, float]第一个概率分布,表示为将结果映射到概率的字典。
qdict[int, float] 或 dict[str, float]第二个概率分布,表示为将结果映射到概率的字典。

返回 ​

float -- 两个分布之间的 Hellinger 距离。值为 0 表示分布相同;值为 1 表示没有重叠。

示例 ​

python
from pyqpanda3.quantum_info import hellinger_distance

p = {0: 0.5, 1: 0.5}
q = {0: 0.3, 1: 0.7}

d = hellinger_distance(p, q)
print(d)

运行结果:

0.1452366588341136

hellinger_fidelity ​

计算两个概率分布之间的 Hellinger 保真度(Hellinger fidelity)。Hellinger 保真度与 Hellinger 距离的关系为 FH(p,q)=(1−H(p,q)2)2,或等价地:

FH(p,q)=(∑xp(x)q(x))2

签名(整型键字典) ​

python
hellinger_fidelity(
    p: dict[int, float],
    q: dict[int, float],
) -> float

签名(字符串键字典) ​

python
hellinger_fidelity(
    p: dict[str, float],
    q: dict[str, float],
) -> float

参数 ​

参数类型说明
pdict[int, float] 或 dict[str, float]第一个概率分布。
qdict[int, float] 或 dict[str, float]第二个概率分布。

返回 ​

float -- 两个分布之间的 Hellinger 保真度。值为 1 表示分布相同;值为 0 表示没有重叠。

示例 ​

python
from pyqpanda3.quantum_info import hellinger_fidelity

p = {0: 0.5, 1: 0.5}
q = {0: 0.3, 1: 0.7}

f = hellinger_fidelity(p, q)
print(f)  # 0.96

运行结果:

0.958257569495584

KL_divergence ​

计算两个概率分布之间的 Kullback-Leibler(KL)散度。

对于离散分布:

DKL(p|q)=∑xp(x)log⁡p(x)q(x)

对于连续分布:

DKL(p|q)=∫p(x)log⁡p(x)q(x)dx

注意: KL 散度不对称:DKL(p|q)≠DKL(q|p)。

签名(离散) ​

python
KL_divergence(
    p: list[float],
    q: list[float],
) -> float

签名(连续) ​

python
KL_divergence(
    p_pdf: Callable[[float], float],
    q_pdf: Callable[[float], float],
    x_start: float,
    x_end: float,
    dx: float = 1e-4,
) -> float

参数(离散) ​

参数类型说明
plist[float]第一个离散概率分布。
qlist[float]第二个离散概率分布。

参数(连续) ​

参数类型说明
p_pdfCallable[[float], float]第一个分布 p(x) 的概率密度函数。
q_pdfCallable[[float], float]第二个分布 q(x) 的概率密度函数。
x_startfloat积分区间的下界。
x_endfloat积分区间的上界。
dxfloat数值积分的步长。默认为 1e-4。

返回 ​

float -- 分布 p 相对于分布 q 的 KL 散度。值非负;当且仅当分布相同时为零。

示例 ​

离散分布:

python
from pyqpanda3.quantum_info import KL_divergence

p = [0.5, 0.5]
q = [0.3, 0.7]

d = KL_divergence(p, q)
print(d)

运行结果:

0.08717669357238891

连续分布:

python
import math
from pyqpanda3.quantum_info import KL_divergence

def p_pdf(x):
    return math.exp(-x) if x >= 0 else 0.0

def q_pdf(x):
    return 0.5 * math.exp(-0.5 * x) if x >= 0 else 0.0

d = KL_divergence(p_pdf, q_pdf, 0.0, 20.0, 1e-4)
print(d)

运行结果:

0.19318185912583796

state_fidelity ​

计算两个量子态之间的保真度。支持密度矩阵与态矢量两两组合的四种重载。态矢量保真度为 |⟨ψ2|ψ1⟩|2;密度矩阵保真度使用标准的 Uhlmann 定义。

说明:扁平(一维)输入会被解释为态矢量;二维方阵被解释为密度矩阵。矩阵重载先于态矢量重载注册,以避免把嵌套 Python 序列误派发到态矢量分支。

签名(密度矩阵 × 密度矩阵) ​

python
state_fidelity(matrix1, matrix2, validate: bool = True) -> float

签名(密度矩阵 × 态矢量) ​

python
state_fidelity(matrix, state, validate: bool = True) -> float

签名(态矢量 × 密度矩阵) ​

python
state_fidelity(state, matrix, validate: bool = True) -> float

签名(态矢量 × 态矢量) ​

python
state_fidelity(state1, state2, validate: bool = True) -> float

参数 ​

参数类型说明
matrix / matrix1 / matrix2二维方阵密度矩阵。
state / state1 / state2一维复数组态矢量振幅。
validatebool是否校验归一化/正定性(默认 True)。校验失败抛出 RuntimeError;设为 False 跳过校验,结果可能超出 [0, 1]。

返回 ​

float -- 两个态之间的保真度,范围通常为 [0, 1](仅当 validate=False 且输入非物理时可能越界)。

示例 ​

python
from pyqpanda3.quantum_info import state_fidelity

plus = [[0.5, 0.5], [0.5, 0.5]]   # |+><+|
zero = [[1.0, 0.0], [0.0, 0.0]]   # |0><0|

# 密度矩阵 × 密度矩阵
print(round(state_fidelity(plus, zero), 6))

# 密度矩阵 × 态矢量
print(round(state_fidelity(zero, [1.0, 0.0]), 6))

# 态矢量 × 态矢量(正交,保真度为 0)
print(round(state_fidelity([0.5, 0.5, 0.5, 0.5], [0.5, -0.5, 0.5, -0.5]), 6))

运行结果:

0.5
1.0
0.0

另见 ​

Released under the MIT License.