2021/11/23 from Xwhite
实验一离散信源的统计度量-自信量和熵的计算
实验要求
1、请分别完成离散信源自信息量及信源熵
根据所编函数计算如下信源的自信息量及信源熵。
2、有条英文信息总共包含100个字符,假定其中每个字符从26个英文字母和3个标点符号中等概率选取,那么这条信息提供的信息量为多少?
3、若将上述29个字符分为三类,第一类中包含9个字符,该类出现的概率为1/7;第二类中包含13个字符,该类出现的概率为2/7;第三类中包含7个字符,该类出现的概率为4/7;每类中各字符均以等概率出现,求此时该信源的信息熵。
4、有两个二元随机变量X和Y,它们的联合概率分布函数如下表:
试求:
a、熵H(X),联合熵H(X,Y);
b、条件熵H(X|Y);
c、平均互信息I(X;Y);
实验代码
from math import *
# 求各个符号信息量
def xxl(v_list):
i = 0
for x in v_list:
i += 1
result = -log(x, 2)
print("I(x%d)=%s" % (i, result))
# 求信源熵
def ent(v_list):
result = 0
for x in v_list:
result += -1 * log(x, 2) * x
return result
# N次扩展离散无记忆信源熵
def N_ent(n, p):
return n * log(p, 2)
# 第四题
def Result_4():
x_list = [1 / 2, 1 / 2]
y_list = [1 / 2, 1 / 2]
xy_list = [1 / 8, 1 / 8, 3 / 8, 3 / 8]
print('H(X)=', ent(x_list))
print('H(Y)=', ent(y_list))
print('H(XY)=', ent(xy_list))
a = ent(xy_list) - ent(y_list)
b = ent(x_list) + ent(y_list) - ent(xy_list)
# I(X;Y) = H(X)+H(Y)-H(XY)
print('H(X|Y)=', a)
print('I(X;Y)=', b)
if __name__ == '__main__':
value_list = [1 / 2, 1 / 4, 1 / 8, 1 / 8]
value3_list = [1 / 7, 2 / 7, 4 / 7]
print('第1题结果:')
xxl(value_list)
print("H(x)=", ent(value_list))
print('第2题结果为:', N_ent(100, 29))
print('第3题结果为:',ent(value3_list))
print('第4题结果为:')
Result_4()
运行结果
如果结果有错请在评论区指正