首页 > 解决方案 > 理解python中的字节对象

问题描述

亲爱的大家: 我正在尝试在压缩过程中测量香农的熵。为此,我首先生成一个 0 和 1 的数组,我称之为二进制序列seq,然后使用zlib.compress(seq). 例如:

seq = np.array([0,0,1])
seq_compress = zlib.compress(seq)

seq_compress
[out] >>> b'x\x9cc`\x80\x00F$\x1a\x00\x00$\x00\x03'

最后一个对象set_compress是字节类型。为了测量熵率,我需要计算在这个压缩序列中出现 0 和 1 的概率,所以我需要转换seq_compress为只有 0 和 1 的列表、数组或字符串。

我尝试了以下方法:

import sys
bin(int.from_bytes(seq_compress, byteorder=sys.byteorder))

[out]>>>'0b1000000000000100000000000000000000000001100010000001000110000000001000000001100000011000111001110001111000'

这比我预期的要长得多。我知道这与“字节”对象有关,因为如果我将初始数组转换为字节,我会得到类似的效果:

seq_bytes = seq.tobytes()
bin(int.from_bytes(seq_bytes, byteorder=sys.byteorder))

[out]>>>
'0b10000000000000000000000000000000000000000000000000000000000000000'

我认为这没什么大不了的,因为最后一个对象的熵与我开始的数组中的熵相同,但我想知道为什么要添加所有这些 0。

标签: pythonbinarybyteentropy

解决方案


推荐阅读