python - python中的联合熵

标签 python math numpy entropy

我有两个数组:

import numpy as np
a = np.array(['1','2','3'])
b = np.array(['3','4','1','5'])

我想计算联合熵。我找到了一些制作它的 Material :

import numpy as np
def entropy(*X):
    return = np.sum(-p * np.log2(p) if p > 0 else 0 
        for p in (np.mean(reduce(np.logical_and, (predictions == c for predictions, c in zip(X, classes))))
        for classes in itertools.product(*[set(x) for x in X])))

似乎与 len(a) = len(b) 一起工作正常,但如果 len(a) != len(b) 则以错误结束

>

UPD:数组 ab 是从示例主输入创建的:

b:3 p1:1 p2:6 p5:7
b:4 p1:2 p7:2
b:1 p3:4 p5:8
b:5 p1:3 p4:4 

其中数组 a 是根据 p1 值创建的。因此,并非每一行都由每个 pK 组成,但每一行都有 b 属性。我需要计算每个 pK 的互信息 I(b,pK)

最佳答案

假设您正在谈论 Joint Shannon Entropy ,公式直截了当:

enter image description here

这个问题,当我看看你到目前为止所做的事情时,你缺少 P(x,y),即两个变量一起出现的联合概率。看起来 a,b 分别是事件 a 和 b 的个体概率。

您发布的代码还有其他问题(在评论中提到):

  1. 您的变量不是数字数据类型 a=["1","2"]a=[1,2 ]。一个是字符串,另一个是数字。
  2. 输入数据的长度必须相同,即对于 A 中的每个 x,B 中必须有一个 y 并且您需要知道联合概率P(x,y)

关于python - python中的联合熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828016/

相关文章:

python - 比较列中的字符串并在 python 中创建相应的新列

c++ - 找到与给定 3D 线正交的远离 d 距离的点

actionscript-3 - 从倾斜表面弹起

javascript - 带方向的粒子布朗运动

python - PIL.Image到cv2:参数 'src'的预期Ptr <cv::UMat>

python - 如何按最后一列对 NumPy 字符串数组进行排序

python - lxml 增量 XML 序列化重复命名空间

python - 权限错误: [Errno 13] Permission denied (after multiple successful writting attemps in the file)

python - numpy:比较两个日期值返回 TypeError: '>=' 和 'int' 的实例之间不支持 'datetime.datetime'

python - nbytes 和 getsizeof 返回不同的值