You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ByteString转换为由0和1组成的numpy数组?

ByteString转0/1组成的NumPy数组

要实现将ByteString转换为纯0和1的NumPy数组,核心是解析每个字节的二进制位并展开成一维数组,以下是两种可行方案:

方案一:字符串转换法(直观易懂)

先将ByteString转为uint8类型的NumPy数组(每个元素对应单个字节的十进制值),再把每个值转成8位二进制字符串,最后拆分拼接成0/1数组:

import numpy as np

byte_str = b'\xed\x07b\x87S.\x866^\x84\x1e\x92\xbf\xc5\r\x8c'

# 1. 将ByteString转为uint8数组(每个元素是0-255的字节值)
byte_array = np.frombuffer(byte_str, dtype=np.uint8)

# 2. 把每个字节值转成8位二进制字符串(补前导零)
binary_strs = np.vectorize(lambda x: f"{x:08b}")(byte_array)

# 3. 拼接所有二进制字符串,拆分为单个字符后转成int数组
binary_array = np.array(list(''.join(binary_strs)), dtype=np.int8)

方案二:位运算优化法(高效适合大数据)

通过位运算直接提取每个字节的每一位,避免字符串操作,性能更优:

import numpy as np

byte_str = b'\xed\x07b\x87S.\x866^\x84\x1e\x92\xbf\xc5\r\x8c'

# 1. 转为uint8数组
byte_array = np.frombuffer(byte_str, dtype=np.uint8)

# 2. 生成8位掩码(从最高位到最低位:128,64,...,1)
bit_masks = np.array([1 << i for i in range(7, -1, -1)], dtype=np.uint8)

# 3. 按位与提取每一位,转成bool后再转为int,最后展平为一维数组
binary_array = (byte_array[:, None] & bit_masks).astype(bool).astype(np.int8).flatten()

验证说明

以示例中的第一个字节0xed为例,其二进制为11101101,转换后的数组开头8位会是[1,1,1,0,1,1,0,1],符合预期。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:55:14