scipy.spatial.distance.jensenshannon¶
- scipy.spatial.distance.jensenshannon(p, q, base=None, *, axis=0, keepdims=False)[源代码]¶
计算两个概率数组之间的Jensen-Shannon距离(度量)。这是詹森-香农散度的平方根。
两个概率向量之间的Jensen-Shannon距离 p 和 q 定义为,
\[\sqrt{\frac{D(p\并行m)+D(q\并行m)}{2}}\]哪里 \(m\) 是按点表示的平均值 \(p\) 和 \(q\) 和 \(D\) 就是库尔巴克-莱布勒发散。
这个例程会正常化的 p 和 q 如果它们的总和不是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距离 p 和 q 沿着 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])