我有一个数组可以映射生命游戏中的细胞。到目前为止,每个单元格都有一个int。为了最小化读取量,我想将数组压缩为每1个整数8个单元格。
当我想创建一个位图时会出现问题,该位图需要一个0和1的数组,就像前一种情况一样。
是否有任何快速方式在numpy转换它?我可以为你做一个循环,但可能有更好的方法。
示例:
[01011100b, 0x0] -> [0, 1, 0, 1, 1, 1, 0 ,0, 0,0,0,0,0,0,0,0]
答案 0 :(得分:2)
numpy.packbits
和numpy.unpackbits
非常接近您所寻找的内容:
>>> numpy.packbits([1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1])
array([225, 184], dtype=uint8)
>>> numpy.unpackbits(array([225, 184], dtype=numpy.uint8))
array([1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0], dtype=uint8)
请注意,如果numpy.unpackbits(numpy.packbits(x))
不是8的倍数,则x
与len(x)
的长度不同;最后将用零填充。