scipy.spatial.distance.
jensenshannon#
- scipy.spatial.distance.jensenshannon(p, q, base=None, *, axis=0, keepdims=False)[source]#
计算两个概率数组之间的 Jensen-Shannon 距离(度量)。这是 Jensen-Shannon 散度的平方根。
两个概率向量 p 和 q 之间的 Jensen-Shannon 距离定义为,
\[\sqrt{\frac{D(p \parallel m) + D(q \parallel m)}{2}}\]其中 \(m\) 是 \(p\) 和 \(q\) 的逐点平均值,\(D\) 是 Kullback-Leibler 散度。
如果 p 和 q 的总和不为 1.0,则此例程将对其进行归一化。
- 参数:
- p(N,) array_like
左侧概率向量
- q(N,) array_like
右侧概率向量
- basedouble, optional
用于计算输出的对数的底数,如果未给出,则该例程使用 scipy.stats.entropy 的默认底数。
- axisint, optional
计算 Jensen-Shannon 距离所沿的轴。默认为 0。
1.7.0 版本中新增。
- keepdimsbool, optional
如果设置为 True,则缩减的轴将保留在结果中,作为大小为 1 的维度。使用此选项,结果将正确地针对输入数组进行广播。默认为 False。
1.7.0 版本中新增。
- 返回值:
- jsdouble or ndarray
p 和 q 沿 axis 的 Jensen-Shannon 距离。
说明
1.2.0 版本中新增。
示例
>>> from scipy.spatial import distance >>> import numpy as np >>> distance.jensenshannon([1.0, 0.0, 0.0], [0.0, 1.0, 0.0], 2.0) 1.0 >>> distance.jensenshannon([1.0, 0.0], [0.5, 0.5]) 0.46450140402245893 >>> distance.jensenshannon([1.0, 0.0, 0.0], [1.0, 0.0, 0.0]) 0.0 >>> a = np.array([[1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12]]) >>> b = np.array([[13, 14, 15, 16], ... [17, 18, 19, 20], ... [21, 22, 23, 24]]) >>> distance.jensenshannon(a, b, axis=0) array([0.1954288, 0.1447697, 0.1138377, 0.0927636]) >>> distance.jensenshannon(a, b, axis=1) array([0.1402339, 0.0399106, 0.0201815])