我正在尝试在 Python 中实现 Theil 的索引(http://en.wikipedia.org/wiki/Theil_index)来衡量列表中收入的不平等。
该公式基本上是香农的熵,所以它处理对数。我的问题是我的列表中有一些收入为 0,而 log(0) 使我的公式不满意。我相信将一个微小的浮点数添加到 0 不会像 log(tinyFloat) = -inf 那样工作,这会弄乱我的索引。
[编辑] 这是一个片段(取自另一个更简洁的 - 并且免费提供 - 实现)
def error_if_not_in_range01(value):
if (value <= 0) or (value > 1):
raise Exception, \
str(value) + ' is not in [0,1)!'
def H(x)
n = len(x)
entropy = 0.0
sum = 0.0
for x_i in x: # work on all x[i]
print x_i
error_if_not_in_range01(x_i)
sum += x_i
group_negentropy = x_i*log(x_i)
entropy += group_negentropy
error_if_not_1(sum)
return -entropy
def T(x):
print x
n = len(x)
maximum_entropy = log(n)
actual_entropy = H(x)
redundancy = maximum_entropy - actual_entropy
inequality = 1 - exp(-redundancy)
return redundancy,inequality
有没有办法解决这个问题?