【问题标题】:packing a numpy array of ones and zeroes into a array of 32 bit values将 numpy 的 1 和 0 数组打包成 32 位值数组
【发布时间】:2021-11-07 12:06:50
【问题描述】:

我在一个 numpy 整数数组中有一个 1 和 0 的一维数组,我想将这些值打包到一个无符号 32 位整数值数组中。

例如,假设整数数组是

{0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1

我想把它转换成这个

{0b01111111111000000000000111111111,0b11111111111111110000111111111111}

我怎样才能做到这一点?提前致谢

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

您使用 bitshift 将数字移动到正确的二进制索引。然后只是累积值。

(d << np.arange(len(d))).sum()

这里有一个更广泛的版本:

# first, extend to a multiple of 32
d = np.append(d, np.zeros(len(d) & 31, dtype=d.dtype))
# reshape into Nx32
d = d.reshape((-1, 32))
# broadcasted bitshift
bits = d << np.arange(32, dtype=d.dtype))
# accumulate into one value per row
bits = bits.sum(axis=1)

【讨论】:

    【解决方案2】:

    我会使用numpy.packbitsnumpy.frombuffer。虽然结果缺少第一个零,但 mcsoini 说这是预期的 - 零在那里,只是没有打印。

    import numpy as np
    
    data = [0,1,1,1,1,1,1,1,1,1,
            1,0,0,0,0,0,0,0,0,0,
            0,0,0,1,1,1,1,1,1,1,
            1,1,1,1,1,1,1,1,1,1,
            1,1,1,1,1,1,1,1,0,0,
            0,0,1,1,1,1,1,1,1,1,
            1,1,1]
    
    result = np.frombuffer(np.packbits(data).tobytes(), dtype=np.uint32)
    print([bin(item) for item in result])
    
    ['0b11111111000000011110000001111111', '0b11111110000011111111111111111111']
    

    【讨论】:

    • 这对我有用,我不得不像 Homer512 所说的那样将我的数组扩展为 32 的倍数。谢谢
    【解决方案3】:

    我认为你最好的选择是通过字符串:

    d = [0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1, 0]
    
    [bin(int("".join(map(str, integer)), 2)) 
     for integer in np.array_split(d, len(d) / 32)]
    
    # Out:
    # ['0b1111111111000000000000111111111', '0b11111111111111110000111111111110']
    

    我在输入数据中添加了一个零,使长度成为 32 的倍数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2019-12-03
    相关资源
    最近更新 更多