scipy.spatial.distance.

jensenshannon#

scipy.spatial.distance.jensenshannon(p, q, base=None, *, axis=0, keepdims=False)[源代码][源代码]#

计算两个概率数组之间的 Jensen-Shannon 距离(度量)。这是 Jensen-Shannon 散度的平方根。

两个概率向量 pq 之间的 Jensen-Shannon 距离定义为,

\[\sqrt{\frac{D(p \parallel m) + D(q \parallel m)}{2}}\]

其中 \(m\)\(p\)\(q\) 的逐点均值,而 \(D\) 是 Kullback-Leibler 散度。

如果 pq 的和不等于 1.0,此例程将对它们进行归一化处理。

参数:
p(N,) 数组类

左概率向量

q(N,) 数组类

正确的概率向量

基础双精度,可选

如果没有给出对数的基础,那么在计算输出时,程序将使用 scipy.stats.entropy 的默认基础。

int, 可选

计算Jensen-Shannon距离所沿的轴。默认值为0。

Added in version 1.7.0.

keepdimsbool, 可选

如果设置为 True,减少的轴将作为尺寸为1的维度保留在结果中。使用此选项,结果将正确地与输入数组广播。默认值为 False。

Added in version 1.7.0.

返回:
js双精度或ndarray

沿 axispq 之间的 Jensen-Shannon 距离。

注释

Added in version 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])