Matplotlib画图----信息熵函数图像

最近在看GAN和VAE的过程中,发现信息熵的概念多次出现,就又复习了一下。为了更形象的了解信息熵,在网上找信息熵函数图像的过程中,发现只有二元的信息熵图像,出于好奇,画了就画了一下三元的。

E = − p 1 ∗ l o g 2 p 1 − ( 1 − p 1 ) ∗ l o g 2 ( 1 − p 1 ) E = -p_1 * log_2p_1 - (1 - p_1) * log_2(1 - p_1) E=p1log2p1(1p1)log2(1p1)
二元信息熵函数
E = − p 1 ∗ l o g 2 p 1 − p 2 ∗ l o g 2 p 2 − ( 1 − p 1 − p 2 ) ∗ l o g 2 ( 1 − p 1 − p 2 ) E = -p_1 * log_2p_1 - p_2 * log_2p_2 - (1 - p_1 - p_2) * log_2(1 - p_1 - p_2) E=p1log2p1p2log2p2(1p1p2)log2(1p1p2)
三元信息熵函数

代码:

# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 二类信息熵
def binary_entropy(p, epslion=1e-10):
	'''params:
		   p: A numpy array
		   epslion: 防止数值溢出
	'''
	return -(p * np.log2(p + epslion) + (1 - p) * np.log2(1 - p + epslion))
# 三类信息熵
def compute_entropy(p1, p2, p3, epslion=1e-10):
	'''params:
		   p1, p2, p3: A numpy array
		   epslion: 防止数值溢出
	'''
	return -(p1 * np.log2(p1 + epslion) + p2 * np.log2(p2 + epslion) + p3 * np.log2(p3 + epslion))
# 二类信息熵图像
p1 = np.linspace(0, 1, 50)
entropy = binary_entropy(p1)

plt.figure()
plt.plot(p1, entropy, 'k-')
plt.xlabel('$p_1$')
plt.ylabel('E')
plt.savefig('./二类熵函数图像.jpg')
plt.show()

# 三类信息熵图像
p1 = np.linspace(0, 1, 50)
p2 = np.linspace(0, 1, 50)

x, y = np.meshgrid(p1,p2)    # 生成网格
z = 1 - x - y                # p3 = 1- p1 - p2
z[z <= 0] = 0.				 # p1 + p2 >= 1 则p3 = 0
E = compute_entropy(x, y, z, 1e-10)
E[(x + y) > 1] = None 		 # p1 + p2 > 1 熵值不存在

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x, y, E, rstride=1, cstride=1)
ax.set_xlabel('$p_1$')
ax.set_ylabel('$p_2$')
ax.set_zlabel('E')
plt.savefig('./三类熵函数图像.jpg')
plt.show()

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值