大数组二进制数据

时间:2014-08-10 22:16:37

标签: python

我正在使用二进制的大型三维数据数组,每个值都是两个可能的值之一。我目前将这些数据存储在numpy数组中作为1或0的int32对象。

它适用于小型阵列但最终我需要制作阵列5000x5000x20,我甚至无法接近而没有得到"内存错误"。

有没有人对更好的方法有任何建议?我真的希望我可以在一个数据结构中将它们全部保存在一起,因为我需要沿着所有三个轴访问它的切片。

2 个答案:

答案 0 :(得分:1)

另一种可能性是将20位的最后一个轴表示为单个32位整数。这样一个5000x5000阵列就足够了。

答案 1 :(得分:0)

如果将numpy数组的数据类型更改为更小的数据类型,性能会更好。

对于可以采用两个值之一的数据,您可以使用uint8,它始终是一个字节:

arr = np.array(your_data, dtype=np.uint8)

或者,您可以使用np.bool,但我不确定是否实际上是8位值还是使用本机字大小。 (为了清晰起见,我倾向于明确使用8位值,尽管这更像是个人选择。)


但是,在一天结束时,你谈论的是很多数据,而且很可能即使使用较小的值集合,也无法加载它一下子就变成了python。

在这种情况下,可能值得研究一下你是否可以将问题分解成更小的部分。