2017-03-08 4 views
0

Ich habe eine Numpy Array:Python numpy shannon Entropie Array

A = [ 1.56 1.47 1.31 1.16 1.11 1.14 1.06 1.12 1.19 1.06 0.92 0.78 
     0.6 0.59 0.4 0.03 0.11 0.54 1.17 1.9 2.6 3.28 3.8 4.28 
     4.71 4.61 4.6 4.41 3.88 3.46 3.04 2.63 2.3 1.75 1.24 1.14 
     0.97 0.92 0.94 1. 1.15 1.33 1.37 1.48 1.53 1.45 1.32 1.08 
     1.06 0.98 0.69] 

Wie kann ich die Shannon-Entropie erhalten?

ich es so gesehen, aber nicht sicher:

print -np.sum(A * np.log2(A), axis=1) 

Antwort

3

Im Wesentlichen gibt es zwei Fälle, und es ist nicht klar, aus Ihrer Probe, die man hier trifft.

(1) Ihre Wahrscheinlichkeitsverteilung ist diskret. Dann müssen Sie die scheinbar relativen Häufigkeiten in Wahrscheinlichkeiten umwandeln

pA = A/A.sum() 
Shannon2 = -np.sum(pA*np.log2(pA)) 

(2) Ihre Wahrscheinlichkeitsverteilung ist kontinuierlich. In diesem Fall müssen die Werte in Ihrer Eingabe nicht zu eins addiert werden. Unter der Annahme, dass der Eingang regelmäßig aus dem gesamten Raum abgetastet wird, dann würden Sie

pA = A/A.sum() 
Shannon2 = -np.sum(pA*np.log2(A)) 

aber in diesem Fall erhalten die Formel hängt wirklich von den Einzelheiten der Probenahme und dem darunter liegenden Raum.

Seitennotiz: die axis=1 in Ihrem Beispiel wird einen Fehler verursachen, da Ihre Eingabe flach ist. Geh weg.

+0

Vielen Dank für Ihre Hilfe! Es klappt. –