如何将整数转换为指定长度的二进制numpy数组?
整数转固定长度二进制numpy数组的实现方法
下面提供两种实用的实现方式,满足将单个整数转换为指定长度的0/1 numpy数组需求(自动补前导零):
方法一:字符串格式化转换
通过Python内置字符串格式化生成固定长度二进制字符串,再逐字符转换为整数构建numpy数组,逻辑直观易懂:
import numpy as np def int_to_bin_array(n, bits): # 截断超出指定长度的高位,仅保留最低bits位 truncated_n = n & ((1 << bits) - 1) # 生成补零后的固定长度二进制字符串 bin_str = format(truncated_n, f'0{bits}b') # 转换为numpy整数数组 return np.array([int(char) for char in bin_str], dtype=np.int8)
测试示例:
>>> int_to_bin_array(19, bits=7) array([0, 0, 1, 0, 0, 1, 1], dtype=int8)
方法二:numpy位运算实现
利用numpy向量运算直接操作二进制位,效率更高,适合批量处理场景:
import numpy as np def int_to_bin_array(n, bits): # 生成从高位到低位的位掩码数组 masks = 2 ** np.arange(bits - 1, -1, -1) # 通过按位与和整除运算提取每一位的0/1值,自动截断高位 return (n & masks) // masks
测试示例:
>>> int_to_bin_array(19, bits=7) array([0, 0, 1, 0, 0, 1, 1])
注意事项
- 若输入整数的二进制位数超过指定
bits,两种方法都会自动保留最低的bits位(截断高位);若需提前校验避免截断,可在函数开头添加判断:if n >= 2 ** bits: raise ValueError(f"整数{n}的二进制位数超过指定长度{bits}")
内容的提问来源于stack exchange,提问作者Mastiff
相关产品推荐
相关产品推荐

