将零和一的 numpy 数组转换为二进制数数组

Converting a numpy array of zeros and ones into an array of binary numbers

我正在寻找一种高效的转向方式

    a=np.array([[0,1,1,0],
                [0,1,1,1]])

进入

    b=np.array([[0b0110],
                [0b0111]])

或进入

    b=np.array([[6],
                [7]])

到目前为止我唯一发现的是 np.packbits 但这只适用于 8 位数字。但是我的数组的形状约为 (20e6,20)

我当然可以手工完成:

    a=np.array([[0,1,1,0],[0,1,1,1]])
    c=2**np.arange(np.shape(a)[-1])[::-1]
    b=a.dot(c)
    b
    Out: array([6, 7])

但我认为有更快的方法。特别是如果可以直接转换为二进制数组。

感谢帮助!

np.packbits 这样做。但是,结果数组的位存储在 np.uint8 项的块中。这意味着 a.shape[1] <= 8 必须为真。此外,它在右边打包位(在 bigendian 模式下),因此您需要移动值。这是结果代码:

np.packbits(a, bitorder='big', axis=1) >> (8-a.shape[1])

如果您需要代码与 a.shape[1] > 8 一起使用,那么您可以编写基于 的 Numba 代码。