scipy.spatial.distance.

jensenshannon#

scipy.spatial.distance.jensenshannon(p, q, основание=None, *, ось=0, keepdims=False)[источник]#

Вычислить расстояние (метрику) Йенсена-Шеннона между двумя массивами вероятностей. Это квадратный корень из дивергенции Йенсена-Шеннона.

Расстояние Йенсена-Шеннона между двумя вероятностными векторами p и q определяется как,

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

где \(m\) является поточечным средним \(p\) и \(q\) и \(D\) является дивергенцией Кульбака-Лейблера.

Эта процедура нормализует p и q если их сумма не равна 1.0.

Параметры:
p(N,) array_like

левый вектор вероятностей

q(N,) array_like

правый вероятностный вектор

основаниеdouble, опционально

основание логарифма, используемого для вычисления вывода, если не задано, то процедура использует основание по умолчанию scipy.stats.entropy.

осьint, необязательный

Ось, вдоль которой вычисляются расстояния Йенсена-Шеннона. По умолчанию равно 0.

Добавлено в версии 1.7.0.

keepdimsbool, необязательно

Если это установлено в True, уменьшенные оси остаются в результате как измерения с размером один. С этой опцией, результат будет корректно транслироваться на входной массив. По умолчанию False.

Добавлено в версии 1.7.0.

Возвращает:
jsdouble или ndarray

Расстояния Йенсена-Шеннона между p и q вдоль ось.

Примечания

Добавлено в версии 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])