分析 -- 距离度量
用于比较概率分布和量子测量结果的函数。
hellinger_distance
计算两个概率分布之间的 Hellinger 距离(Hellinger distance)。Hellinger 距离衡量两个离散分布之间的相似度,范围在
对于离散分布
签名(整型键字典)
python
hellinger_distance(
p: dict[int, float],
q: dict[int, float],
) -> float签名(字符串键字典)
python
hellinger_distance(
p: dict[str, float],
q: dict[str, float],
) -> float参数
| 参数 | 类型 | 说明 |
|---|---|---|
| p | dict[int, float] 或 dict[str, float] | 第一个概率分布,表示为将结果映射到概率的字典。 |
| q | dict[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.2hellinger_fidelity
计算两个概率分布之间的 Hellinger 保真度(Hellinger fidelity)。Hellinger 保真度与 Hellinger 距离的关系为
签名(整型键字典)
python
hellinger_fidelity(
p: dict[int, float],
q: dict[int, float],
) -> float签名(字符串键字典)
python
hellinger_fidelity(
p: dict[str, float],
q: dict[str, float],
) -> float参数
| 参数 | 类型 | 说明 |
|---|---|---|
| p | dict[int, float] 或 dict[str, float] | 第一个概率分布。 |
| q | dict[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.96KL_divergence
计算两个概率分布之间的 Kullback-Leibler(KL)散度。
对于离散分布:
对于连续分布:
注意: KL 散度不对称:
。
签名(离散)
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参数(离散)
| 参数 | 类型 | 说明 |
|---|---|---|
| p | list[float] | 第一个离散概率分布。 |
| q | list[float] | 第二个离散概率分布。 |
参数(连续)
| 参数 | 类型 | 说明 |
|---|---|---|
| p_pdf | Callable[[float], float] | 第一个分布 |
| q_pdf | Callable[[float], float] | 第二个分布 |
| x_start | float | 积分区间的下界。 |
| x_end | float | 积分区间的上界。 |
| dx | float | 数值积分的步长。默认为 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)连续分布:
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)