Numpy:每字节打包N位

eqfvzcg8  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(157)

我在GNURAdio中使用numpy,其中有可变数量的位,应该根据调制类型打包到给定的字节中。与这个问题无关,但这就是背景。
使用numpy,我如何将一个位数组重新打包成每个字节N位?
例如,如果我有一个位数组[0, 1, 1, 1, 0, 0, 1, 0],并且我希望每个字节打包2位,那么我的输出数组应该看起来像[1, 3, 0, 2]。如果我想每字节打包4位,输出应该像[7, 2]
np.packbits函数没有每字节位数的参数。对于高性能解决方案有什么建议吗?

djp7away

djp7away1#

IIUC,您可以padpackbits

def packbits(arr, bits_per_byte):
    arr = np.reshape(arr, (-1, bits_per_byte))
    arr = np.pad(arr, 
           pad_width=((0, 0), (8 - arr.shape[1], 0)))
    return np.packbits(arr, axis=1)
>>> bits = [0, 1, 1, 1, 0, 0, 1, 0]
>>> print(packbits(bits, 2)) 
[[1]
 [3]
 [0]
 [2]]

>>> print(packbits(bits, 4))
[[7]
 [2]]

相关问题