2017-03-08 5 views
0

내가 NumPy와 배열이 있습니다파이썬 NumPy와 섀넌 엔트로피 배열

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] 

가 어떻게 섀넌의 엔트로피를 얻을 수 있습니까? 나는이 있지만 확실하지처럼 보았다

:

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

답변

3

은 본질적으로 이가지 경우가있다 그것은 하나가 여기에 적용 샘플에서 명확하지 않다.

(1) 귀하의 확률 분포는 불연속입니다. 그렇다면 상대 주파수로 보이는 것을 확률로 변환해야합니다.

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

(2) 확률 분포가 연속적입니다. 이 경우 입력 값이 하나의 합계 일 필요는 없습니다. 입력이 전체 공간에서 정기적으로 샘플링된다고 가정하면, 당신은

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

을 얻을 것이라고하지만,이 경우 수식은 정말 샘플링의 세부 사항 및 기본 공간에 따라 달라집니다.

사이드 노트 : 예에서 axis=1은 입력 내용이 잘못되었으므로 오류가 발생합니다. 싫어.

+0

도움을 주셔서 감사합니다. 그것은 작동합니다. –