如何在python中保存大数组使它占用较少的内存?

2024-05-13 19:46:45 发布

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

我对Python还不熟悉。我有一个很大的数组a,它有(43200, 4000)这样的维度,我需要保存它,因为我需要它来进行将来的处理。当我试图用np.savetxt保存它时,txt文件太大,我的程序运行到内存错误,因为我需要处理5个相同大小的文件。有没有什么方法可以节省大量的数组以减少内存消耗?

谢谢。


Tags: 文件方法内存txt程序运行错误np数组
2条回答

您可以使用PyTables创建分层数据格式(HDF)文件来存储数据。这提供了一些有趣的内存选项,可以将正在处理的对象链接到其中保存的文件。

下面是另一个StackOverflow问题,演示如何执行此操作:"How to store a NumPy multidimensional array in PyTables."

如果您愿意将数组用作Pandas数据帧对象,还可以使用PyTables/HDF5的Pandas接口,例如:

import pandas
import numpy as np
a = np.ones((43200, 4000)) # Not recommended.
x = pandas.HDFStore("some_file.hdf")

x.append("a", pandas.DataFrame(a)) # <-- This will take a while.
x.close()

# Then later on...
my_data = pandas.HDFStore("some_file.hdf") # might also take a while
usable_a_copy = my_data["a"] # Be careful of the way changes to
                             # `usable_a_copy` affect the saved data.

copy_as_nparray = usable_a_copy.values

对于这种大小的文件,您可以考虑是否可以使用并行算法执行应用程序,并且可能只应用于大型数组的子集,而不需要在继续之前使用所有数组。

将数据保存到文本文件是非常低效的。Numpy内置了保存命令savesavez/savez_compressed,这两个命令更适合存储大型数组。

根据您计划如何使用数据,还应该研究HDF5格式(h5py或pytables),它允许您存储大型数据集,而无需将其全部加载到内存中。

相关问题 更多 >