简略计算香农信息熵(Shannon Entropy)

2017-09-14  本文已影响0人  CristinaXu

先推荐一个信息熵计算器

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
上一篇下一篇

猜你喜欢

热点阅读