如何为大型python数组节省内存?

2024-03-29 09:15:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我从一个csv文件(20332*17009)中读取了一个大python数组,该文件使用window7 64位操作系统和12g ram。数组的值在一半的位置,如下面的示例所示。我只需要有值可供分析的数组,而不是整个数组。在

[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值进行分析,从而节省更多内存?在

提前谢谢!在


Tags: 文件csv内存示例数组ram节省有值
1条回答
网友
1楼 · 发布于 2024-03-29 09:15:00

根据您的描述,稀疏表示可能对您不太有用。不过,还有许多其他选择:

  1. 请确保使用尽可能小的数据类型来表示值。上面显示的示例最好用单字节整数表示。读入numpy数组或python数组可以很好地控制数据类型。

  2. 一次只读取一部分数据,就可以用内存换取性能。如果您将整个数据集重写为二进制而不是CSV,那么您可以使用mmap访问文件,就好像它已经在内存中一样(这也会使读写速度更快)。

  3. 如果您真的需要整个数据集在内存中(但它确实不适合),那么可能需要某种压缩。稀疏矩阵是一种选择(正如larsmans在评论中提到的,scipy和pandas都有稀疏矩阵实现),但只有在零值条目的比例很大时,这些方法才有帮助。更好的压缩选项将取决于数据的性质。考虑将数组分解成块,并使用快速压缩算法(如RLE、SZIP等)对其进行压缩。

相关问题 更多 >