如何在numpy中创建一个布尔数组

时间:2017-02-10 17:16:35

标签: 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 = 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%

2 个答案:

答案 0 :(得分:1)

虽然有一种方法可以操纵numpy中的“位字段”,但这些方法在位级别上没有提供正确的numpy数组的便利。

那就是说,numpy确实有“逻辑”或“布尔”数组,即带有dtype bool的数组。这些每个元素只占一个字节,并且是正确的数组。当您的数组由“逻辑数组操作”创建时,例如,b = (a > 0)它(b)将自动为bool类型。您可以通过标准的numpy方式获取布尔数组a.astype(bool),array(...,dtype = bool)等。

答案 1 :(得分:0)

这样可以减少75%,每个项目四个字节到每个项目一个字节。

bool_array = np.logical_and(int_array, True)