【发布时间】:2018-04-23 04:44:41
【问题描述】:
我使用以下代码在表示概率分布的数组上返回香农熵。
A = np.random.randint(10, size=10)
pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(pA))
如果数组不包含任何零,这可以正常工作。
例子:
Input: [2 3 3 3 2 1 5 3 3 4]
Output: 3.2240472715
但是,如果数组确实包含零,香农熵会产生 nan
例子:
Input:[7 6 6 8 8 2 8 3 0 7]
Output: nan
我确实收到了两个 RuntimeWarnings:
1) RuntimeWarning: log2中遇到除以零
2) RuntimeWarning: 在乘法中遇到无效值
有没有办法更改代码以包含零?我只是不确定完全删除它们是否会影响结果。具体来说,如果分布频率越高,变化越大。
【问题讨论】:
-
在计算的后面部分删除零并不等于忽略零。零的影响来自
pA = A / A.sum()。由于存在零,A.sum()的结果更小。