先推薦一個(gè)信息熵計(jì)算器
http://www.shannonentropy.netmark.pl/
輸入你想計(jì)算的內(nèi)容:二進(jìn)制代碼或英文字母短語語句(e.g.1100101, Lorem ipsum)
計(jì)算器會(huì)按這個(gè)公式計(jì)算
我這次計(jì)算短語:“have fun”? (注意夯膀,此處有空格)
這是短語中所含符號(hào)列表
Alphabet of symbols in the string: a e f h n u v 還有空格
計(jì)算符號(hào)出現(xiàn)的概率/頻率
Frequencies of alphabet symbols:
0.125 ->空格
0.125 -> a
0.125 -> e
0.125 -> f
0.125 -> h
0.125 -> n
0.125 -> u
0.125 -> v
因?yàn)槊總€(gè)符號(hào)只出現(xiàn)了一次,所以用1/8簡單來算客叉。但嚴(yán)格來說屡立,26個(gè)字母出現(xiàn)的概率并不是相同的。
之后把各個(gè)符號(hào)的概率帶入公式亩进,得出結(jié)果
H(X) =-[(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+
(0.125log20.125)+(0.125log20.125)+(0.125log20.125)+(0.125log20.125)]
H(X) =-[(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)+(-0.375)]
H(X) =-[-3]
H(X) =3
這一步的python代碼
from math import log
def calcShannonEnt(probList):
shannonEnt=0.0
for prob in probList:
shannonEnt=shannonEnt-prob*log(prob,2)
return shannonEnt
########################
pList=[0.125,0.125,0.125,0.125,0.125,0.125,0.125,0.125]#8?jìng)€(gè)符號(hào)的概率
entropy=calcShannonEnt(pList)
print entropy
其實(shí)scipy有現(xiàn)成計(jì)算熵函數(shù)症虑,但是裝起來比較麻煩,等不及的話就自己寫啦归薛。
上述例子用2做log的底數(shù)谍憔,計(jì)算單位是bit.
其它底數(shù)對(duì)應(yīng)的單位:
??????????? e - nat
? ? ? ? ? 10 - hartley/ban/dit
之后又計(jì)算了米兔積木機(jī)器人每個(gè)積木零件的信息熵
以這一款造型為例
以下是所需零件列表
現(xiàn)在可求得每個(gè)零件在套內(nèi)出現(xiàn)的概率
將概率一列輸入python代碼中得出每個(gè)零件的信息熵(bit)
零件數(shù):981?????????? H: 5.3
可與樂高歷代套裝零件的信息熵做一下對(duì)比