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

Hyr*_*ial 3 python scipy

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
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*vid 6

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

>>> 1 * np.log(1/0.5)
>>> 0.6931471805599453
Run Code Online (Sandbox Code Playgroud)

对于entropy(a, b),有一种被零除的情况,0.5/0,它会导致无限解。

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