scipy.spatial.distance.jensenshannon

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

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

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

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

哪里 \(m\) 是按点表示的平均值 \(p\)\(q\)\(D\) 就是库尔巴克-莱布勒发散。

这个例程会正常化的 pq 如果它们的总和不是1.0。

参数
p(n,)类似数组

左概率向量

q(n,)类似数组

右概率向量

base双倍,可选

用于计算输出的对数的底如果没有给定,则例程使用默认的scipy.stats.熵的底。

axis整型,可选

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

1.7.0 新版功能.

keepdims布尔值,可选

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

1.7.0 新版功能.

退货
js双倍或ndarray

之间的Jensen-Shannon距离 pq 沿着 axis

注意事项

1.2.0 新版功能.

示例

>>> from scipy.spatial import distance
>>> 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])