包含零的数组上的香农熵

6 python entropy pandas

我使用以下代码在表示概率分布的数组上返回香农熵。

A = np.random.randint(10, size=10)

pA = A / A.sum()
Shannon2 = -np.sum(pA*np.log2(pA))
Run Code Online (Sandbox Code Playgroud)

如果数组不包含任何零,则此方法可以正常工作。

例子:

Input: [2 3 3 3 2 1 5 3 3 4]
Output: 3.2240472715
Run Code Online (Sandbox Code Playgroud)

然而,如果数组确实包含零,香农熵会产生 nan

例子:

Input:[7 6 6 8 8 2 8 3 0 7]
Output: nan
Run Code Online (Sandbox Code Playgroud)

我确实收到两个运行时警告:

1) RuntimeWarning: log2 中遇到除零

2) RuntimeWarning: 乘法中遇到无效值

有没有办法改变代码以包含零?我只是不确定完全删除它们是否会影响结果。具体来说,如果由于分布频率较高而导致变化较大。

bas*_*ndi 7

我想你想用nansumnans 计为零:

A = np.random.randint(10, size=10)
pA = A / A.sum()
Shannon2 = -np.nansum(pA*np.log2(pA))
Run Code Online (Sandbox Code Playgroud)