如何解决从二进制位串计算熵
想计算二进制字符串的熵。
但是对于不同的二进制字符串得到相同的结果。那么正确与否。
数据集如下:
import math
#df :
A B C D Result
----------------------
x x x x 111100100
x x x x 110100100
x x x x 111101111
x x x x 100100100
.
.
.
Df1 = {'Result':[111100100,110100100,111101111,100100100,111100111,111101110],
用于计算熵但对于不同的字符串得到相同的结果。
def entropy(string):
"Calculates the Shannon entropy of a string"
# get probability of chars in string
prob = [ float(string.count(c)) / len(string) for c in dict.fromkeys(list(string)) ]
# calculate the entropy
entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])
return entropy
df['entropy'] = df['result'].apply(lambda x: entropy(x))
运行此代码后得到如下熵结果:
A B C D Result entropy
------------------------------------
x x x x 111100100 0.991076
x x x x 110100100 0.991076
x x x x 111101111 0.503258
x x x x 100100100 0.918296
.
.
.
为不同的二进制字符串获得相同的熵分数。 正确与否?不知道。
解决方法
这是正确的。
逐步了解:
prob
第一个字符串给出 [5,4]
,第二个:[4,5]
。一旦应用熵,就取 sum
,如果先取 5,然后取 4,反之亦然。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。