输入X的概率分布、以及Y在X条件下的条件分布,计算平均互信息 I(X;Y)
import numpy as np
px = eval(input("请输入X的概率分布p(x):[p1,p2,...]"))
py_x = eval(input("请输入条件概率分布p(y|x):[P1,P2,...]"))
SUM = 0
# 计算联合概率密度pxy
func = lambda x,y:x*y
result = map(func,p,pyx)
pxy=list(result)
pxy2 = [pxy[i:i+len(px)] for i in range(0,len(pxy),len(px))]#将列表按x个数拆分
py = np.sum(pxy2, axis=0)#对子列表转置后求和
px_y = pxy/py
if sum(px) != 1 :
print("概率分布错误")
for i in range(0,len(px)):
if px[i] > 1 or px[i] <= 0:
print("概率分布错误")
else:
for j in range(0,len(px_y)):
h = np.log2(px_y[j]/ px[i]) * px[i] * py_x[j]#计算单个值
SUM = SUM + h #求和
print("I(X;Y)的值是:",float( "{0:.5}".format(SUM)))