我使用具有 12 G ram 的 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 值进行分析并节省更多内存?
提前致谢!
鉴于您的描述,稀疏表示可能对您不是很有用。但是,还有许多其他选择:
确保使用尽可能小的数据类型来表示您的值。您上面显示的示例最好表示为单字节整数。读入 numpy 数组或 python 数组将使您能够很好地控制数据类型。
您可以通过一次仅读取部分数据来交换内存以换取性能。如果您将整个数据集重写为二进制而不是 CSV,那么您可以使用 mmap 来访问该文件,就好像它已经在内存中一样(这也可以加快读写速度)。
如果您真的需要内存中的整个数据集(而且它确实不适合),那么可能需要进行某种压缩。稀疏矩阵是一种选择(正如 larsmans 在评论中提到的,scipy 和 pandas 都有稀疏矩阵实现),但这些只有在零值条目的比例很大时才有帮助。更好的压缩选项将取决于数据的性质。考虑将数组分解成块并使用 RLE、SZIP 等快速压缩算法压缩这些块。