微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从二进制位串计算熵

如何解决从二进制位串计算熵

想计算二进制字符串的熵。

但是对于不同的二进制字符串得到相同的结果。那么正确与否。

数据集如下:

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 举报,一经查实,本站将立刻删除。