Python计算信息熵实例

Python计算信息熵实例

什么是信息熵?

信息熵是一个衡量信息传递的无序程度的指标,通常用来描述一个系统的不确定性。

对于离散型随机变量 $X$,其信息熵定义为:

$$H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i$$

其中,$n$ 表示 $X$ 可能取值的个数,$p_i$ 表示 $X$ 取第 $i$ 个值的概率。

如何用Python计算信息熵?

下面通过一个简单的例子来介绍如何用Python计算信息熵。

假设有一组数据,表示一个班级的分数分布情况,如下所示:

score = [82, 65, 75, 90, 83, 72, 80, 67, 85, 88, 76, 70, 87, 78, 92, 84, 73, 79, 71, 77, 89, 74, 81, 86, 68]

为了计算信息熵,我们需要先计算每个分数出现的概率,代码如下:

n = len(score)  # 分数总数
p = {}
for s in score:
    p[s] = p.get(s, 0) + 1
for key in p:
    p[key] /= n

其中,变量 p 表示分数出现的概率,它是一个字典类型。

接着,我们可以根据公式计算信息熵,代码如下:

from math import log2

H = 0
for key in p:
    H -= p[key] * log2(p[key])

最终得到的结果是 H = 4.163824732413406

再来看一个稍微复杂一些的例子。

假设有一组数据,表示一个班级学生的出生月份分布情况,如下所示:

birth_month = ['Jan', 'Feb', 'Jan', 'Mar', 'Dec', 'Jul', 'Nov', 'Feb', 'Jan', 'Oct', 'Jan', 'Aug', 'Jul', 'Apr', 'Jan', 'Dec', 'Jul', 'Oct', 'Nov', 'Feb', 'Sep', 'Feb', 'Aug', 'Aug', 'Mar']

为了计算信息熵,我们需要将出生月份转化为数值表示,代码如下:

month2num = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
num_birth_month = [month2num[m] for m in birth_month]

接着,我们可以根据公式计算信息熵,代码如下:

n = len(num_birth_month)  # 出生月份总数
p = {}
for m in num_birth_month:
    p[m] = p.get(m, 0) + 1
for key in p:
    p[key] /= n

H = 0
for key in p:
    H -= p[key] * log2(p[key])

print(H)

最终得到的结果是 H = 3.44599238430015

以上就是用Python计算信息熵的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python计算信息熵实例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 使用Python实现BT种子和磁力链接的相互转换

    使用Python实现BT种子和磁力链接的相互转换 BT种子和磁力链接是现代P2P文件共享网络中最为常见的资源获取方式。本文将介绍如何使用Python实现BT种子和磁力链接的相互转换。 1. BT种子和磁力链接的定义 BT种子是一种种子文件,它包含了一个或多个文件的元数据,包括文件名、文件大小、文件数量、文件MD5值、Tracker列表等信息。通过BT种子文件…

    python 2023年6月2日
    00
  • 详解Python 重命名目录中的所有文件名

    当需要批量重命名目录中的所有文件名时,可以使用Python进行自动化操作。以下是使用Python重命名目录中的所有文件名的完整攻略: 1. 导入必要的模块 要进行文件名修改,首先要导入Python内置的os模块,该模块提供了很多文件操作函数。 import os 2. 使用os.listdir()函数获取目录下的所有文件名 使用os.listdir()函数获…

    python-answer 2023年3月25日
    00
  • python不等于运算符的具体使用

    当我们需要判断两个变量是否不相等时,可以使用Python中的“不等于”运算符!=。 具体使用方法如下: 表示不等于的运算符 在Python中,我们可以使用!=来表示“不等于”的运算符。例如: x = 5 y = 10 if x != y: print("x不等于y") 上述代码中,我们定义了两个变量x和y,然后使用“不等于”运算符!=判断…

    python 2023年5月18日
    00
  • Python 面向对象编程详解

    Python面向对象编程详解 Python是一种面向对象的编程语言,它支持面向对象编程(OOP)的所有特性,包括封装、继承和多态。本文将详细讲解Python面向对象编程的概念、法和示例。 面向对象编程的概念 面向对象编程是一种编程范式,它将数据和操作数据的方法组在一起,形成对象。对象可以看作是一个实,具有属性和方法。面向对象编程的核心思想是将程序看作是一组对…

    python 2023年5月13日
    00
  • Python hashlib模块与subprocess模块使用详细介绍

    Python hashlib模块与subprocess模块使用详细介绍 简介 hashlib是Python的哈希(散列)加密模块,可以进行 SHA1、SHA224、SHA256、SHA384、SHA512 等多种哈希算法进行加密,也可以使用 MD5、SHA1 等算法进行加密。而subprocess模块可以启动一个新进程,并与该进程的标准输入、输出和错误句柄进…

    python 2023年6月2日
    00
  • Python中xml和dict格式转换的示例代码

    下面是“Python中xml和dict格式转换的示例代码”的完整攻略。 1. 背景介绍 在Python的开发过程中,经常需要将XML格式的数据转换成Python的dict格式。这样可以方便地提取和操作数据。Python提供了一些标准的库,可以方便地完成XML与dict的相互转换。 2. 示例一:XML转换成Dict 假设我们有一个XML文件,内容如下: &l…

    python 2023年6月3日
    00
  • python| 关于excel的文件处理

    创建一个成绩单文件score.xlsx,将平时成绩单.xlsx文件中对应班级工作表中学号和姓名列的内容写入到score.xlsx中,并添加成绩列,每个学生的成绩采用随机生成的一个分数填写进去,最后统计所有学生的平均成绩计算出来后,写入到score.xlsx的最后一行最后一列之后的单元格中去。预想的步骤:1.打开原始文件以及打开目标文件2.读取原始文件中每个工…

    python 2023年4月22日
    00
  • Python 2与Python 3版本和编码的对比

    首先我们需要了解Python 2和Python 3的一些区别和不同,以及在编码方面需要注意的问题。 Python 2与Python 3的主要区别: 打印语句:Python 2中使用print语句,而Python 3中使用print函数。 整数类型:Python 2中的整数类型默认为int,而Python 3中的整数类型为long,int类型只能表示32位整数…

    python 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部