エントロピー
$ E = -\sum_{i=1}^{n} p_i \log_2 p_i
定義ではlogの底は2の筈だが、log2ではなくlogを使うとscipyのentropyと値が一致する、調査中。
確率0の場合 log2(0) = -inftyとなるので、ここでは 0 log(0) = 0 で対処している。
code:p.py
import numpy as np
import scipy as sp
def entropy(p_list):
p_log = np.zeros_like(p_list)
for i, p in enumerate(p_list):
if p == 0:
else:
print(p_log)
return - (p_log).sum()
print(entropy(p), p, sp.stats.entropy(p))
print(entropy(p), p, sp.stats.entropy(p))
print(entropy(p), p, sp.stats.entropy(p))
print(entropy(p), p, sp.stats.entropy(p))
print(entropy(p), p, sp.stats.entropy(p))