首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么scipy.stats.entropy(a,b)返回inf,而scipy.stats.entropy(b,a)不返回inf?

为什么scipy.stats.entropy(a,b)返回inf,而scipy.stats.entropy(b,a)不返回inf?
EN

Stack Overflow用户
提问于 2019-07-29 22:10:45
回答 3查看 2.9K关注 0票数 2
代码语言:javascript
复制
In [15]: a = np.array([0.5, 0.5, 0, 0, 0])

In [16]: b = np.array([1, 0, 0, 0, 0])

In [17]: entropy(a, b)
Out[17]: inf

In [18]: entropy(b, a)
Out[18]: 0.6931471805599453

从他们的文档中,我希望两个人都返回inf,因为给出的方程是S = sum(pk * log(pk / qk), axis=0)。第18行的非无限输出的原因是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-29 22:46:23

entropy(b, a)函数计算第一对:

代码语言:javascript
复制
>>> 1 * np.log(1/0.5)
>>> 0.6931471805599453

对于entropy(a, b),有一种情况是除以零,即0.5/0,这将导致无限解.

对于其余部分,entropy()假定为0 * np.log(0/0) = 0

票数 5
EN

Stack Overflow用户

发布于 2019-07-29 23:00:18

研究Kullback-Leibler散度的定义,似乎是因为它是如何定义的。

这是维基百科:

当P(x)为零时,对应项的贡献被解释为零,因为极限为零 (单击该方程的链接)。

票数 2
EN

Stack Overflow用户

发布于 2021-04-19 06:33:36

当提供p和q时,熵函数计算KL-散度。KL-散度是不对称的,意思是KL(p,q)!=KL(q,p),除非是p==q.因此,你会得到不同的答案。

进一步说,正如其他答案所解释的那样,你的分布中有零,这意味着根据KL-散度的定义,我们将除以零。

代码语言:javascript
复制
    KL(p,q) = sum(p * log(p/q)) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57261983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档