Python 如何在numpy中创建布尔数组
我必须处理一个大数据300×4×1400000的整数数组,大约Python 如何在numpy中创建布尔数组,python,arrays,numpy,optimization,bigdata,Python,Arrays,Numpy,Optimization,Bigdata,我必须处理一个大数据300×4×1400000的整数数组,大约 4byte * 300 * 4 * 1400000 = 6.72GB 但是,此数组仅包含0或1。因此,如果我可以使用布尔数组,那么大小将缩小到原始数据的6.25% 6.72GB / 4bytes / 8bits/bytes * 2 = 420Mbits 有没有办法在numpy中使用布尔数组 编辑: 我不知道他为什么删除了他的答案,但这正是我想要的 arr = np.ones((300,2,1400000), dtype = n
4byte * 300 * 4 * 1400000 = 6.72GB
但是,此数组仅包含0或1。因此,如果我可以使用布尔数组,那么大小将缩小到原始数据的6.25%
6.72GB / 4bytes / 8bits/bytes * 2 = 420Mbits
有没有办法在numpy中使用布尔数组
编辑:
我不知道他为什么删除了他的答案,但这正是我想要的
arr = np.ones((300,2,1400000), dtype = np.bool)
这将导致12.5%的压缩
>>> arr = np.ones((300,2,1400000), dtype = np.bool)
>>> arr.nbytes
840000000
>>> arr = np.ones((300,2,1400000))
>>> arr.nbytes
6720000000
840000000/6720000000 = 12.5%
这将使您减少75%,从每项4字节减少到每项1字节
bool_array = np.logical_and(int_array, True)
虽然有一种方法可以操作这些文件中的“位字段”,但它们并不能在位级别上提供适当的numpy数组的便利
这就是说,numpy确实有逻辑或布尔数组,即带有dtype bool的数组。它们每个元素只占用一个字节,是正确的数组。当您的数组是通过逻辑数组操作创建的,例如,b=a>0,它将自动成为布尔类型。您可以通过标准的numpy方式获得布尔数组a.astypebool、array…、dtype=bool等。此数组仅包含0或1。。。每个元素有2个位-嗯,什么?如何用2位来表示呢?谢谢。我使用h5py从.mat数据文件加载数组。看起来,即使数据只包含0和1,我也得到了整数数组。因此,我将使用dtype=np.bool参数将其转换为bool数组。@takataka我认为hdf5使用或能够使用压缩,这将大大减少浪费。不知道matlab-hdf5到底做了什么。不管怎样,我觉得你的计划不错。