【Python】计算一组数据的信息熵-混乱度

python 计算信息熵

网上看到用collections的Counter类计数的,但是Counter计数的dict_value不知道怎么转为数组,所以用numpy的bincount计数。
bincount输入要求是整型,以array的格式返回数列的最大值最小值范围内每个数值出现的次数,没有出现的记0,返回array的长度是:

max-min+1

代码:

def entropy(pixels):
	    num = len(pixels)
	    pixels = pixels.astype(int)
	    # count_array = Counter(pixels).values()
	    count_array = np.bincount(pixels)
	    indx = np.argwhere(count_array == 0)
	    counts = np.delete(count_array, indx)
	    # counts = count_array.tolist()
	    # ps = filter(lambda x: x == 0, count_array)
	    p = counts / num  # float(count_array.sum())
	    h = sum(-p * np.log2(p))
	    return h

由于0不能参与到熵计算中,因此要将bincount返回的0移除,尝试了filter和remove,filter不知道返回值是什么,remove(a)只能移除list中第一个a,还是获取索引再用numpy的delete删除好使。

啊困扰了一个多小时的问题/(ㄒoㄒ)/~~

你可能感兴趣的:(pytorch编程,图像生成,计算机视觉,图像处理,pytorch)