python - 理解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。
解决方案
推荐阅读
- javascript - 查找两点之间的相对角度
- matlab - MATLAB中的大量线性方程
- python - 无法使用 Python Selenium 启动 Opera
- javascript - MongoDB 聚合管道以获取每个不同状态的员工数量
- python - 每次都给出字典顺序更大的字符串的自由函数
- r - 导入和转换许多 csv 文件
- go - 每个 HTTP 请求都应该有一个新的 datastore.Client 吗?
- valgrind - FreeBSD 上 valgrind 的限制
- swift - 硬编码 NSUserActivityTypes 以恢复不同的数据模型
- unity3d - 为什么我不能缩放 Unity2D Orthographic 游戏?