先推荐一个信息熵计算器
http://www.shannonentropy.netmark.pl/
输入你想计算的内容:二进制代码或英文字母短语语句(e.g.1100101, Lorem ipsum)
计算器会按这个公式计算
我这次计算短语:“have fun” (注意,此处有空格)
这是短语中所含符号列表
Alphabet of symbols in the string: a e f h n u v 还有空格
计算符号出现的概率/频率
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
因为每个符号只出现了一次,所以用1/8简单来算。但严格来说,26个字母出现的概率并不是相同的。
之后把各个符号的概率带入公式,得出结果
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个符号的概率
entropy=calcShannonEnt(pList)
print entropy
其实scipy有现成计算熵函数,但是装起来比较麻烦,等不及的话就自己写啦。
上述例子用2做log的底数,计算单位是bit.
其它底数对应的单位:
e - nat
10 - hartley/ban/dit
之后又计算了米兔积木机器人每个积木零件的信息熵
以这一款造型为例
以下是所需零件列表
零件编号及数量现在可求得每个零件在套内出现的概率
将概率一列输入python代码中得出每个零件的信息熵(bit)
零件数:981 H: 5.3
可与乐高历代套装零件的信息熵做一下对比
来源 《The entropy of LEGO》Andrew Crompton
网友评论