【发布时间】:2012-01-26 04:32:18
【问题描述】:
我试图在 MATLAB 中找到某个概率分布的熵。对于p,我试着做
E = -sum(p .* log2(p))
和Echeck = entropy(p)
E 和 Echeck 不应该相同吗?
关于熵的 matlab 帮助确实说熵被定义为 -sum(p.*log2(p)) 其中 p 包含从 imhist 返回的直方图计数。但该熵还将逻辑以外的任何类转换为 uint8 以进行直方图计数计算,因为它实际上是在尝试计算灰度图像的熵,因此希望像素值是离散的。 所以我想将这个功能用于我的目的是不正确的? 有什么好的选择吗?
【问题讨论】:
-
你的变量
p是什么?如果p是向量,则表达式sum(p .* log2(p))将返回一个标量,而函数entropy期望对表示灰度图像的矩阵进行操作。实际上,entropy函数由entropy(I) = -sum(imhist(I) .* log2(imhist(I)))定义。 -
@Chris Taylor,您应该发表您的评论作为答案。
-
p 是一个概率分布——在我的例子中是一个概率值的 NX1 向量。
-
@Oli meh,你的更完整(另外,我没有图像处理工具箱,所以我看不到
entropy的来源,我认为它已添加到你的答案中) -
MATLAB 熵函数还返回向量 p 的标量。值的差异可能是由于将向量 p 中的双倍概率值转换为 uint8。我想知道 MATLAB 是否有更直接的方法来计算任何概率分布的熵
标签: matlab statistics entropy