我使用带有12 G内存的window7 64位操作系统机器从csv文件(20332 * 17009)读取一个大型python数组。该数组在一半的位置具有值,如下例所示。我只需要具有分析值的数组,而不是整个数组。
[0 0 0 0 0 0
0 0 0 3 8 0
0 4 2 7 0 0
0 0 5 2 0 0
0 0 1 0 0 0]
我想知道:是否可以忽略0值进行分析并节省更多内存?
提前致谢!
答案 0 :(得分:2)
根据您的描述,稀疏表示可能对您没有用。不过还有很多其他选择:
确保使用可能的最小数据类型表示您的值。您在上面显示的示例最好表示为单字节整数。读入numpy数组或python数组可以很好地控制数据类型。
您可以通过一次只读取部分数据来交换内存以提高性能。如果您将整个数据集重写为二进制而不是CSV,那么您可以使用mmap来访问该文件,就像它已经在内存中一样(这也会使读取和写入更快)。
如果你确实需要内存中的整个数据集(并且它确实不适合),那么可能需要某种压缩。稀疏矩阵是一个选项(正如评论中提到的larsmans,scipy和pandas都有稀疏矩阵实现),但这些仅在零值条目的分数很大时才有用。更好的压缩选项取决于数据的性质。考虑将阵列分解为块并使用快速压缩算法(如RLE,SZIP等)压缩它们。