python">import math
import numpy as np
def shannon_entropy(single,k):
'''
single:1-D信号
k: 分多少个bin
'''
numofx = single.shape[0]
maxV = np.max(single)
minV = np.min(single)
bin = np.linspace(minV,maxV,k+1)
bin_numx = [0]*k # 落在每个bin的数据点数目
for x in single: # 计算落在每个bin的数据点数目
for i in range(k): # 看落在哪个bin
if x <= bin[i]:
bin_numx[i-1] += 1
shannon_ent = 0
for i in bin_numx:
shannon_ent -= (i/numofx) * math.log((i/numofx),2)
return shannon_ent
a = np.array([1,2,3,4,54,6,7,8,99])
b = shannon_entropy(a,2)
print(b)