包含零的数组上的香农熵
Shannon's Entropy on an array containing zero's
我使用以下代码 return 表示概率分布的数组上的香农熵。
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) 运行时警告:乘法中遇到无效值
有没有办法更改代码以包含零?我只是不确定完全删除它们是否会影响结果。具体来说,如果由于分布频率较高,变化会更大。
最简单和最常用的方法是忽略零概率并计算剩余值的香农熵。
Try the following:
import numpy as np
A = np.array([1.0, 2.0, 0.0, 5.0, 0.0, 9.0])
A = np.array(filter(lambda x: x!= 0, A))
pA = A / A.sum()
Shannon2 = -np.sum(pA * np.log2(pA))
我认为您想使用 nansum
将 nan 计为零:
A = np.random.randint(10, size=10)
pA = A / A.sum()
Shannon2 = -np.nansum(pA*np.log2(pA))
我使用以下代码 return 表示概率分布的数组上的香农熵。
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) 运行时警告:乘法中遇到无效值
有没有办法更改代码以包含零?我只是不确定完全删除它们是否会影响结果。具体来说,如果由于分布频率较高,变化会更大。
最简单和最常用的方法是忽略零概率并计算剩余值的香农熵。
Try the following:
import numpy as np
A = np.array([1.0, 2.0, 0.0, 5.0, 0.0, 9.0])
A = np.array(filter(lambda x: x!= 0, A))
pA = A / A.sum()
Shannon2 = -np.sum(pA * np.log2(pA))
我认为您想使用 nansum
将 nan 计为零:
A = np.random.randint(10, size=10)
pA = A / A.sum()
Shannon2 = -np.nansum(pA*np.log2(pA))