Python 如何将bool类型的numpy数组压缩为大小为1/8的uint8
我想“压缩”一个大的布尔数组(Ny,Nx)。将它们转换为大小为(Ny,Nx//8)的uint8数组的最快方法是什么,其中每个布尔平面存储在uint8的下一位 到目前为止,我实现了以下目标:Python 如何将bool类型的numpy数组压缩为大小为1/8的uint8,python,numpy,casting,binary,Python,Numpy,Casting,Binary,我想“压缩”一个大的布尔数组(Ny,Nx)。将它们转换为大小为(Ny,Nx//8)的uint8数组的最快方法是什么,其中每个布尔平面存储在uint8的下一位 到目前为止,我实现了以下目标: import numpy as np def compressImage(imdata): imdatashape = imdata.shape imdata_4d = imdata imdata_4d.shape = *imdatashape[:-1], imdatashap
import numpy as np
def compressImage(imdata):
imdatashape = imdata.shape
imdata_4d = imdata
imdata_4d.shape = *imdatashape[:-1], imdatashape[-1]//8,8
compressed_image = np.zeros(imdata_4d.shape[:-1], np.uint8)
# take every image and add it with the right bit shift to the final image
for i in range(8):
compressed_image += imdata_4d[...,i] << i
return compressed_image
imdata = np.random.randint(0,1, (500, 1600,2560), dtype=np.uint8)
imcompressed = compressImage(imdata)
将numpy作为np导入
def压缩图像(imdata):
imdatashape=imdata.shape
imdata_4d=imdata
imdata_4d.shape=*imdatashape[:-1],imdatashape[-1]//8,8
压缩图像=np.0(imdata\U 4d.shape[:-1],np.uint8)
#拍摄每幅图像,并将其与右位移位一起添加到最终图像
对于范围(8)中的i:
压缩图像+=imdata\u 4d[…,i]使用np.packbits
:
np.packbits(imdata,axis=-1,bitorder="little")
注意np.random.randint(0,1,(500,1600,2560),dtype=np.uint8)
只会生成一个零数组,因为randint
中的上限是独占的。如果要生成二进制数组,请使用np.random.randint(0,2,(5,1600,2560),dtype=np.uint8)
。