scipy.spatial.distance.

jensenshannon#

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

Berechnet den Jensen-Shannon-Abstand (Metrik) zwischen zwei Wahrscheinlichkeitsarrays. Dies ist die Quadratwurzel der Jensen-Shannon-Divergenz.

Der Jensen-Shannon-Abstand zwischen zwei Wahrscheinlichkeitsvektoren p und q ist definiert als,

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

wobei \(m\) der punktweise Mittelwert von \(p\) und \(q\) ist und \(D\) die Kullback-Leibler-Divergenz ist.

Diese Routine normalisiert p und q, wenn sie nicht zur Summe 1,0 ergeben.

Parameter:
p(N,) array_like

linker Wahrscheinlichkeitsvektor

q(N,) array_like

rechter Wahrscheinlichkeitsvektor

basedouble, optional

die Basis des Logarithmus, der zur Berechnung der Ausgabe verwendet wird. Wenn nicht angegeben, verwendet die Routine die Standardbasis von scipy.stats.entropy.

axisint, optional

Achse, entlang derer die Jensen-Shannon-Abstände berechnet werden. Standard ist 0.

Hinzugefügt in Version 1.7.0.

keepdimsbool, optional

Wenn dies auf True gesetzt ist, bleiben die reduzierten Achsen im Ergebnis als Dimensionen mit Größe eins erhalten. Mit dieser Option wird das Ergebnis korrekt gegen das Eingabearray gebroadcastet. Standard ist False.

Hinzugefügt in Version 1.7.0.

Rückgabe:
jsdouble or ndarray

Die Jensen-Shannon-Abstände zwischen p und q entlang der axis.

Hinweise

Hinzugefügt in Version 1.2.0.

Beispiele

>>> 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])